diff --git a/Website/apiConnector.js b/Website/apiConnector.js index f27b912..67e94bd 100644 --- a/Website/apiConnector.js +++ b/Website/apiConnector.js @@ -152,6 +152,12 @@ async function GetRateLimits() { return json; } +async function GetMangaChapters(connector, id) { + var uri = `${apiUri}/Manga/Chapters?connector=${connector}&internalId=${id}` + let json = await GetData(uri); + return json; +} + function CreateMonitorJob(connector, internalId, language, interval, folder = null, chapterNo){ var uri = `${apiUri}/Jobs/MonitorManga?connector=${connector}&internalId=${internalId}&interval=${interval}&translatedLanguage=${language}&ignoreBelowChapterNum=${chapterNo}`; if (folder != '') { @@ -181,6 +187,11 @@ function RefreshLibraryMetadata() { PostData(uri); } +function RefreshMangaMetadata(id) { + var uri = `${apiUri}/Jobs/UpdateMetadata?internalId=${id}`; + PostData(uri); +} + async function DownloadLogs() { var uri = `${apiUri}/LogFile`; @@ -367,4 +378,4 @@ async function GetLogmessages(count){ let json = await GetData(uri); console.log(json); return json; -} \ No newline at end of file +} diff --git a/Website/index.html b/Website/index.html index 7260bd0..93250b2 100644 --- a/Website/index.html +++ b/Website/index.html @@ -7,6 +7,9 @@ + + + @@ -254,24 +257,32 @@ - - cover - - Best Manga there is - A Manga - Glax - - An interesting description. The description is very intriguing, yet wholesome. - - - Start Job ▶️ - Cancel Job ❌ - Delete Job 🗑️ - Monitor ➕ - Download Chapter 📥 - - - + + + + × + + + + + + + + +
+ +
+
+
+ + +
+ Refresh Metadata + Remove Manga + Start Job +
+
+
diff --git a/Website/interaction.js b/Website/interaction.js index 5c6a0c1..5434535 100644 --- a/Website/interaction.js +++ b/Website/interaction.js @@ -19,11 +19,6 @@ const filterContent = document.querySelector("#filterContent"); const settingsCog = document.querySelector("#settingscog"); const filterFunnel = document.querySelector("#filterFunnel"); const tasksContent = document.querySelector("content"); -const createMonitorTaskButton = document.querySelector("#createMonitoJobButton"); -const createDownloadChapterTaskButton = document.querySelector("#createDownloadChapterJobButton"); -const startJobButton = document.querySelector("#startJobButton"); -const cancelJobButton = document.querySelector("#cancelJobButton"); -const deleteJobButton = document.querySelector("#deleteJobButton"); //Manga viewer popup const mangaViewerPopup = document.querySelector("#publicationViewerPopup"); @@ -31,8 +26,10 @@ const mangaViewerWindow = document.querySelector("publication-viewer"); const mangaViewerDescription = document.querySelector("#publicationViewerDescription"); const mangaViewerName = document.querySelector("#publicationViewerName"); const mangaViewerTags = document.querySelector("#publicationViewerTags"); -const mangaViewerAuthor = document.querySelector("#publicationViewerAuthor"); const mangaViewCover = document.querySelector("#pubviewcover"); +const mangaViewConn = document.querySelector('#publicationViewerConnector'); +const mangaViewStatus = document.querySelector('#publicationViewerStatus'); +const mangaViewChapterNo = document.querySelector('#publicationViewerChapterNo'); //General Rate Limits const defaultRL = document.querySelector("#defaultRL"); @@ -475,7 +472,7 @@ function CreateSearchResult(manga, connector) { //Description var description = document.createElement('div'); - description.className = 'mangaDescription'; + description.className = 'mangaDescription abbreviated'; description.innerText = manga.description; mangaDetails.appendChild(description); @@ -578,60 +575,93 @@ function AddManga(id, connector) { CreateMonitorJob(mangaConnector, mangaID, mangaLanguage, mangaInterval, mangaFolder, mangaChapter); } -startJobButton.addEventListener("click", () => { - StartJob(selectedJob.id); - mangaViewerPopup.style.display = "none"; -}); -cancelJobButton.addEventListener("click", () => { - CancelJob(selectedJob.id); - mangaViewerPopup.style.display = "none"; -}); -deleteJobButton.addEventListener("click", () => { - RemoveJob(selectedJob.id); - UpdateJobs(); - mangaViewerPopup.style.display = "none"; -}); - function ShowMangaWindow(job, manga, event, add){ selectedManga = manga; selectedJob = job; - //Show popup - mangaViewerPopup.style.display = "block"; - //Set position to mouse-position - if(event.clientY < window.innerHeight - mangaViewerWindow.offsetHeight) - mangaViewerWindow.style.top = `${event.clientY}px`; - else - mangaViewerWindow.style.top = `${event.clientY - mangaViewerWindow.offsetHeight}px`; - - if(event.clientX < window.innerWidth - mangaViewerWindow.offsetWidth) - mangaViewerWindow.style.left = `${event.clientX}px`; - else - mangaViewerWindow.style.left = `${event.clientX - mangaViewerWindow.offsetWidth}px`; - - //Edit information inside the window + //Title mangaViewerName.innerText = manga.sortName; - mangaViewerTags.innerText = manga.tags.join(", "); + mangaViewerName.href = manga.websiteUrl; + + //Author and Genre Tag Cloud + mangaViewerTags.replaceChildren(); + manga.authors.forEach(author => { + var authorCard = document.createElement('author-tag'); + + var personImg = document.createElement('img'); + personImg.src = 'media/person.svg'; + authorCard.appendChild(personImg); + + var authorName = document.createElement('span'); + authorName.innerText = author; + authorCard.appendChild(authorName); + + mangaViewerTags.appendChild(authorCard); + }); + manga.tags.forEach(tag => { + var tagElement = document.createElement('manga-tag'); + tagElement.innerText = tag; + mangaViewerTags.appendChild(tagElement); + }); + + //Description mangaViewerDescription.innerText = manga.description; - mangaViewerAuthor.innerText = manga.authors.join(','); + + //Image and Connector mangaViewCover.src = GetCoverUrl(manga.internalId); - toEditId = manga.internalId; - - //Check what action should be listed - if(add){ - createMonitorJobButton.style.display = "initial"; - createDownloadChapterJobButton.style.display = "none"; - cancelJobButton.style.display = "none"; - startJobButton.style.display = "none"; - deleteJobButton.style.display = "none"; - } - else{ - createMonitorJobButton.style.display = "none"; - createDownloadChapterJobButton.style.display = "none"; - cancelJobButton.style.display = "initial"; - startJobButton.style.display = "initial"; - deleteJobButton.style.display = "initial"; + mangaViewConn.innerText = job.mangaConnector.name.toUpperCase(); + mangaViewConn.style.backgroundColor = stringToColour(job.mangaConnector.name); + mangaViewChapterNo.innerText = manga.latestChapterAvailable.toString(); + + //Release Status + switch(manga.releaseStatus){ + case 0: + mangaViewStatus.setAttribute("release-status", "Ongoing"); + mangaViewStatus.innerText = "Ongoing"; + break; + case 1: + mangaViewStatus.setAttribute("release-status", "Completed"); + mangaViewStatus.innerText = "Completed"; + break; + case 2: + mangaViewStatus.setAttribute("release-status", "On Hiatus"); + mangaViewStatus.innerText = "On Hiatus"; + break; + case 3: + mangaViewStatus.setAttribute("release-status", "Cancelled"); + mangaViewStatus.innerText = "Cancelled"; + break; + case 4: + mangaViewStatus.setAttribute("release-status", "Upcoming"); + mangaViewStatus.innerText = "Upcoming"; + break; + default: + mangaViewStatus.setAttribute("release-status", "Status Unavailable"); + mangaViewStatus.innerText = "Status Unavailable"; + break; } + + // //Individual Manga Chapters + // chapters = document.querySelector('#publicationViewerChapters'); + // chapters.replaceChildren(); + // var mangaChapters = GetMangaChapters(job.mangaConnector.name, manga.internalId); + + // mangaChapters.then(value => { + + // sortedChapters = value.sort((a, b) => b.chapterNumber - a.chapterNumber); + + // sortedChapters.forEach(chapter => { + // chapterNo = chapter.chapterNumber; + // var chapterElement = document.createElement('chapter-row'); + // chapterElement.innerText = chapter.fileName; + // chapters.appendChild(chapterElement); + // }) + // }).then(() => { + // //Show popup + // mangaViewerPopup.style.display = "block"; + // }); + + mangaViewerPopup.style.display = "block" } function HidePublicationPopup(){ diff --git a/Website/styles/base.css b/Website/styles/base.css index 68de789..031a17f 100644 --- a/Website/styles/base.css +++ b/Website/styles/base.css @@ -20,6 +20,7 @@ body{ background-color: var(--background-color); font-family: "Inter", sans-serif; overflow-x: hidden; + font-weight: 400; } wrapper { @@ -420,11 +421,14 @@ popup popup-window { overflow: hidden; } -popup#jobStatusView popup-window { - left: 10%; - top: 10%; - height: 80%; - width: 80%; +/*Remove below when individual chapter download is implemented*/ +#publicationViewerPopup > popup-window { + height: fit-content; + width: auto; + max-width: 80%; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); } popup-content{ @@ -642,9 +646,9 @@ a:active { user-select: none; /* Standard syntax */ } -.section-button#reset:hover { - color: red; - border-color: red; +#reset:hover { + color: rgb(255, 44, 29); + border-color: rgb(255, 44, 29); } .section-buttons-container > .section-button:hover { border-color: var(--secondary-color); @@ -711,111 +715,6 @@ blur-background { z-index: 5; } -publication-viewer{ - display: block; - width: 460px; - position: absolute; - top: 200px; - left: 400px; - background-color: var(--accent-color); - border-radius: 5px; - overflow: hidden; - padding: 15px; -} - -publication-viewer::after{ - content: ''; - position: absolute; - left: 0; top: 0; - border-radius: 5px; - width: 100%; - height: 100%; - background: rgba(0,0,0,0.8); - backdrop-filter: blur(3px); -} - -publication-viewer img { - position: absolute; - left: 0; - top: 0; - height: 100%; - width: 100%; - object-fit: cover; - border-radius: 5px; - z-index: 0; -} - -publication-viewer publication-details > * { - margin: 5px 0; -} - -publication-viewer publication-details publication-name { - width: initial; - overflow-x: scroll; - white-space: nowrap; - scrollbar-width: none; -} - -publication-viewer publication-details publication-tags::before { - content: "Tags"; - display: block; - font-weight: bolder; -} - -publication-viewer publication-details publication-tags { - overflow-x: scroll; - white-space: nowrap; - scrollbar-width: none; -} - -publication-viewer publication-details publication-author::before { - content: "Author: "; - font-weight: bolder; -} - -publication-viewer publication-details publication-description::before { - content: "Description"; - display: block; - font-weight: bolder; -} - -publication-viewer publication-details publication-description { - font-size: 12pt; - margin: 5px 0; - height: 145px; - overflow-x: scroll; -} - -publication-viewer publication-details publication-interactions { - display: flex; - flex-direction: row; - justify-content: end; - align-items: start; - width: 100%; -} - -publication-viewer publication-details publication-interactions > * { - margin: 0 10px; - font-size: 16pt; - cursor: pointer; -} - -publication-viewer publication-details publication-interactions publication-starttask { - color: var(--secondary-color); -} - -publication-viewer publication-details publication-interactions publication-delete { - color: red; -} - -publication-view publication-details publication-interactions publication-canceltask { - color: yellow; -} - -publication-viewer publication-details publication-interactions publication-add { - color: limegreen; -} - footer-tag-popup { display: none; padding: 2px 4px; @@ -920,12 +819,14 @@ popup-content #loaderdiv { img-container { height: 300px; - width: 200px; + width: 180px; position: relative; left: 0; top: 0; border-radius: 10px; overflow: hidden; + flex-shrink: 0; + flex-grow: 0; } img-container > img { @@ -954,6 +855,43 @@ manga-connector { text-align: center; } +manga-details { + display: flex; + flex-direction: row; + width: 100%; + margin: 2px; +} + +manga-details > .mangaDescription { + width: 100%; +} + +manga-chapter { + display: flex; + height: 100%; + flex-direction: column; + overflow-y: auto; + overflow-x: hidden; + border-style: solid; + border-width: 2px; + margin: 5px; + border-radius: 10px; + border-color: #bbb; + scrollbar-width: thin; + scrollbar-color: var(--secondary-color) var(--second-background-color); +} + +chapter-row { + font-size: 12pt; + width: 100%; + border-style: solid; + border-color: #ccc; + border-width: 1px; + padding-left: 50px; + padding-top: 7px; + padding-bottom: 7px; +} + span.latest-chapter-no { position: absolute; right: 5px; @@ -1008,11 +946,11 @@ div.new-manga-download-settings { @media only screen and (max-width: 768px) { /* For mobile phones: */ - .section-item > img-container { + img-container { display: none; } - tag-cloud { + .section-item > tag-cloud { display: none !important; } .new-manga-download-settings > row, .downloadManga, border-bar-button.in-library { @@ -1158,6 +1096,16 @@ author-tag > img { margin: 2px; } +.abbreviated { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 10; + line-clamp: 10; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-wrap: break-word; +} + .downloadManga { position: relative; float: right;