Tranga-Website/Website/interaction.js

327 lines
13 KiB
JavaScript
Raw Normal View History

2023-08-31 16:45:33 +02:00
let jobs = [];
let notificationConnectorTypes = [];
let libraryConnectorTypes = [];
2023-05-31 22:16:14 +02:00
const searchBox = document.querySelector("#searchbox");
const settingsPopup = document.querySelector("#settingsPopup");
2023-05-23 16:27:09 +02:00
const settingsCog = document.querySelector("#settingscog");
const tasksContent = document.querySelector("content");
const createMonitorTaskButton = document.querySelector("#createMonitorTaskButton");
const createDownloadChapterTaskButton = document.querySelector("#createDownloadChapterTaskButton");
2023-05-23 18:46:06 +02:00
const publicationViewerPopup = document.querySelector("#publicationViewerPopup");
const publicationViewerWindow = document.querySelector("publication-viewer");
2023-05-23 17:57:48 +02:00
const publicationViewerDescription = document.querySelector("#publicationViewerDescription");
const publicationViewerName = document.querySelector("#publicationViewerName");
2023-05-31 17:54:09 +02:00
const publicationViewerTags = document.querySelector("#publicationViewerTags");
2023-05-23 17:57:48 +02:00
const publicationViewerAuthor = document.querySelector("#publicationViewerAuthor");
const pubviewcover = document.querySelector("#pubviewcover");
const publicationDelete = document.querySelector("publication-delete");
2023-05-26 14:32:08 +02:00
const publicationTaskStart = document.querySelector("publication-starttask");
2023-05-24 20:57:17 +02:00
const settingDownloadLocation = document.querySelector("#downloadLocation");
2023-05-24 21:48:54 +02:00
const settingKomgaUrl = document.querySelector("#komgaUrl");
2023-05-24 20:57:17 +02:00
const settingKomgaUser = document.querySelector("#komgaUsername");
const settingKomgaPass = document.querySelector("#komgaPassword");
2023-06-03 16:25:04 +02:00
const settingKavitaUrl = document.querySelector("#kavitaUrl");
2023-06-03 21:26:29 +02:00
const settingKavitaUser = document.querySelector("#kavitaUsername");
const settingKavitaPass = document.querySelector("#kavitaPassword");
2023-06-15 18:38:47 +02:00
const settingGotifyUrl = document.querySelector("#gotifyUrl");
const settingGotifyAppToken = document.querySelector("#gotifyAppToken");
const settingLunaseaWebhook = document.querySelector("#lunaseaWebhook");
2023-05-24 21:48:54 +02:00
const settingKomgaConfigured = document.querySelector("#komgaConfigured");
2023-06-03 16:25:04 +02:00
const settingKavitaConfigured = document.querySelector("#kavitaConfigured");
2023-06-15 18:38:47 +02:00
const settingGotifyConfigured = document.querySelector("#gotifyConfigured");
const settingLunaseaConfigured = document.querySelector("#lunaseaConfigured");
2023-05-25 10:42:19 +02:00
const settingApiUri = document.querySelector("#settingApiUri");
2023-08-31 23:45:13 +02:00
const newMangaPopup = document.querySelector("#newMangaPopup");
const newMangaConnector = document.querySelector("#newMangaConnector");
const newMangaTitle = document.querySelector("#newMangaTitle");
const newMangaResult = document.querySelector("#newMangaResult");
function Setup(){
GetAvailableNotificationConnectors().then((json) => {
json.forEach(connector => {
notificationConnectorTypes[connector.Key] = connector.Value;
});
});
GetAvailableLibraryConnectors().then((json) => {
json.forEach(connector => {
libraryConnectorTypes[connector.Key] = connector.Value;
});
});
GetAvailableControllers().then((json) => {
json.forEach(connector => {
var option = document.createElement('option');
option.value = connector;
option.innerText = connector;
newMangaConnector.appendChild(option);
});
});
GetMonitorJobs().then((json) => {
json.forEach(job => {
if(!jobs.includes(job)){
jobs.push(job);
}
});
});
ResetContent();
}
Setup();
2023-05-24 20:57:41 +02:00
2023-08-31 16:45:33 +02:00
function ResetContent(){
//Delete everything
tasksContent.replaceChildren();
//Add "Add new Task" Button
var add = document.createElement("div");
add.setAttribute("id", "addPublication")
var plus = document.createElement("p");
plus.innerText = "+";
add.appendChild(plus);
2023-08-31 23:45:13 +02:00
add.addEventListener("click", () => ShowNewMangaSearch());
2023-08-31 16:45:33 +02:00
tasksContent.appendChild(add);
2023-05-24 20:57:41 +02:00
}
2023-08-31 23:45:13 +02:00
function ShowNewMangaSearch(){
newMangaTitle.value = "";
newMangaPopup.style.display = "block";
newMangaResult.replaceChildren();
}
newMangaTitle.addEventListener("keypress", (event) => { if(event.key === "Enter") GetNewMangaItems();})
function GetNewMangaItems(){
if(newMangaTitle.value.length < 4)
return;
newMangaConnector.disabled = true;
newMangaTitle.disabled = true;
GetPublicationFromConnector(newMangaConnector.value, newMangaTitle.value).then((json) => {
console.log(json);
if(json.length > 0)
newMangaResult.style.display = "flex";
json.forEach(result => {
var item = document.createElement("div");
item.className = "mangaResultItem";
var mangaTitle = document.createElement("span");
mangaTitle.className = "mangaResultItemTitle";
mangaTitle.innerText = result.sortName;
item.appendChild(mangaTitle);
newMangaResult.appendChild(item);
});
newMangaConnector.disabled = false;
newMangaTitle.disabled = false;
});
}
2023-08-31 16:45:33 +02:00
//Returns a new "Publication" Item to display in the jobs section
2023-05-23 16:27:09 +02:00
function CreatePublication(publication, connector){
2023-05-23 17:57:48 +02:00
var publicationElement = document.createElement('publication');
publicationElement.setAttribute("id", publication.internalId);
2023-05-23 15:15:29 +02:00
var img = document.createElement('img');
2023-05-25 14:28:56 +02:00
img.src = `imageCache/${publication.coverFileNameInCache}`;
2023-05-23 17:57:48 +02:00
publicationElement.appendChild(img);
2023-05-23 15:15:29 +02:00
var info = document.createElement('publication-information');
var connectorName = document.createElement('connector-name');
2023-05-23 16:27:09 +02:00
connectorName.innerText = connector;
2023-05-23 15:15:29 +02:00
connectorName.className = "pill";
info.appendChild(connectorName);
var publicationName = document.createElement('publication-name');
publicationName.innerText = publication.sortName;
info.appendChild(publicationName);
2023-05-23 17:57:48 +02:00
publicationElement.appendChild(info);
if(publications.filter(pub => pub.internalId === publication.internalId) < 1)
publications.push(publication);
return publicationElement;
2023-05-23 15:15:29 +02:00
}
2023-05-23 18:28:27 +02:00
function ShowPublicationViewerWindow(publicationId, event, add){
//Show popup
publicationViewerPopup.style.display = "block";
2023-05-24 20:17:50 +02:00
//Set position to mouse-position
if(event.clientY < window.innerHeight - publicationViewerWindow.offsetHeight)
publicationViewerWindow.style.top = `${event.clientY}px`;
else
publicationViewerWindow.style.top = `${event.clientY - publicationViewerWindow.offsetHeight}px`;
if(event.clientX < window.innerWidth - publicationViewerWindow.offsetWidth)
publicationViewerWindow.style.left = `${event.clientX}px`;
else
publicationViewerWindow.style.left = `${event.clientX - publicationViewerWindow.offsetWidth}px`;
2023-05-23 17:57:48 +02:00
2023-05-24 20:17:50 +02:00
//Edit information inside the window
var publication = publications.filter(pub => pub.internalId === publicationId)[0];
2023-05-23 17:57:48 +02:00
publicationViewerName.innerText = publication.sortName;
2023-05-31 17:54:09 +02:00
publicationViewerTags.innerText = publication.tags.join(", ");
2023-05-23 17:57:48 +02:00
publicationViewerDescription.innerText = publication.description;
2023-06-10 14:45:04 +02:00
publicationViewerAuthor.innerText = publication.authors.join(',');
pubviewcover.src = `imageCache/${publication.coverFileNameInCache}`;
2023-05-23 18:28:27 +02:00
toEditId = publicationId;
2023-05-23 17:57:48 +02:00
2023-05-24 20:17:50 +02:00
//Check what action should be listed
2023-05-23 18:28:27 +02:00
if(add){
createMonitorTaskButton.style.display = "initial";
createDownloadChapterTaskButton.style.display = "initial";
2023-05-23 18:28:27 +02:00
publicationDelete.style.display = "none";
2023-05-26 14:32:08 +02:00
publicationTaskStart.style.display = "none";
2023-05-23 18:28:27 +02:00
}
2023-05-23 18:46:06 +02:00
else{
createMonitorTaskButton.style.display = "none";
createDownloadChapterTaskButton.style.display = "none";
2023-05-26 14:32:08 +02:00
publicationDelete.style.display = "initial";
publicationTaskStart.style.display = "initial";
2023-05-23 18:46:06 +02:00
}
2023-05-23 17:57:48 +02:00
}
2023-05-24 20:17:50 +02:00
function HidePublicationPopup(){
publicationViewerPopup.style.display = "none";
}
2023-08-31 16:45:33 +02:00
searchBox.addEventListener("keyup", () => FilterResults());
2023-05-24 20:57:17 +02:00
2023-08-31 16:45:33 +02:00
//Filter shown jobs
2023-05-31 22:16:14 +02:00
function FilterResults(){
if(searchBox.value.length > 0){
tasksContent.childNodes.forEach(publication => {
publication.childNodes.forEach(item => {
if(item.nodeName.toLowerCase() == "publication-information"){
item.childNodes.forEach(information => {
if(information.nodeName.toLowerCase() == "publication-name"){
if(!information.textContent.toLowerCase().includes(searchBox.value.toLowerCase())){
publication.style.display = "none";
}else{
publication.style.display = "initial";
}
}
});
}
});
});
}else{
tasksContent.childNodes.forEach(publication => publication.style.display = "initial");
}
}
2023-08-31 16:45:33 +02:00
settingsCog.addEventListener("click", () => {
OpenSettings();
settingsPopup.style.display = "flex";
});
2023-08-31 16:45:33 +02:00
settingKomgaUrl.addEventListener("keypress", (event) => { { if(event.key === "Enter") UpdateSettings(); } });
settingKomgaUser.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
settingKomgaPass.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
settingKavitaUrl.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
settingKavitaUser.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
settingKavitaPass.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
settingGotifyUrl.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
settingGotifyAppToken.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
settingLunaseaWebhook.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
settingApiUri.addEventListener("keypress", (event) => { if(event.key === "Enter") UpdateSettings(); });
2023-08-31 16:45:33 +02:00
function OpenSettings(){
settingGotifyConfigured.innerText = "❌";
settingLunaseaConfigured.innerText = "❌";
settingKavitaConfigured.innerText = "❌";
settingKomgaConfigured.innerText = "❌";
settingKomgaUrl.value = "";
settingKomgaUser.value = "";
settingKomgaPass.value = "";
settingKavitaUrl.value = "";
settingKavitaUser.value = "";
settingKavitaPass.value = "";
settingGotifyUrl.value = "";
settingGotifyAppToken.value = "";
settingLunaseaWebhook.value = "";
settingApiUri.value = "";
GetSettings().then((json) => {
//console.log(json);
settingDownloadLocation.innerText = json.downloadLocation;
settingApiUri.placeholder = apiUri;
});
GetLibraryConnectors().then((json) => {
//console.log(json);
json.forEach(connector => {
switch(libraryConnectorTypes[connector.libraryType]){
case "Kavita":
settingKavitaConfigured.innerText = "✅";
settingKavitaUrl.placeholder = connector.baseUrl;
settingKavitaUser.placeholder = "***";
settingKavitaPass.placeholder = "***";
break;
case "Komga":
settingKomgaConfigured.innerText = "✅";
settingKomgaUrl.placeholder = connector.baseUrl;
settingKomgaUser.placeholder = "***";
settingKomgaPass.placeholder = "***";
break;
default:
console.log("Unknown type");
console.log(connector);
break;
}
});
});
GetNotificationConnectors().then((json) => {
//console.log(json);
json.forEach(connector => {
switch(notificationConnectorTypes[connector.notificationConnectorType]){
case "Gotify":
settingGotifyUrl.placeholder = connector.endpoint;
settingGotifyAppToken.placeholder = "***";
settingGotifyConfigured.innerText = "✅";
break;
case "LunaSea":
settingLunaseaConfigured.innerText = "✅";
settingLunaseaWebhook.placeholder = connector.id;
break;
default:
console.log("Unknown type");
console.log(connector);
break;
}
});
});
}
2023-08-31 16:45:33 +02:00
function UpdateSettings(){
if(settingApiUri.value != ""){
apiUri = settingApiUri.value;
setCookie("apiUri", apiUri);
Setup();
}
if(settingKomgaUrl.value != "" &&
settingKomgaUser.value != "" &&
settingKomgaPass.value != ""){
UpdateKomga(settingKomgaUrl.value, utf8_to_b64(`${settingKomgaUser.value}:${settingKomgaPass.value}`));
}
if(settingKavitaUrl.value != "" &&
settingKavitaUser.value != "" &&
settingKavitaPass.value != ""){
UpdateKavita(settingKavitaUrl.value, settingKavitaUser.value, settingKavitaPass.value);
}
if(settingGotifyUrl.value != "" &&
settingGotifyAppToken.value != ""){
UpdateGotify(settingGotifyUrl.value, settingGotifyAppToken.value);
}
if(settingLunaseaWebhook.value != ""){
UpdateLunaSea(settingLunaseaWebhook.value);
}
OpenSettings();
2023-05-31 22:16:14 +02:00
}
2023-08-31 16:45:33 +02:00
function utf8_to_b64(str) {
return window.btoa(unescape(encodeURIComponent( str )));
}