diff --git a/Website/apiConnector.js b/Website/apiConnector.js index dbe3dbc..83aa35c 100644 --- a/Website/apiConnector.js +++ b/Website/apiConnector.js @@ -163,6 +163,11 @@ function UpdateDownloadLocation(downloadLocation){ PostData(uri); } +function ChangeStyleSheet(sheet){ + var uri = `${apiUri}/Settings/ChangeStyleSheet?styleSheet=${sheet}`; + PostData(uri); +} + function UpdateKomga(komgaUrl, komgaAuth){ var uri = `${apiUri}/LibraryConnectors/Update?libraryConnector=Komga&komgaUrl=${komgaUrl}&komgaAuth=${komgaAuth}`; PostData(uri); diff --git a/Website/index.html b/Website/index.html index fcb68ee..9cf6850 100644 --- a/Website/index.html +++ b/Website/index.html @@ -3,7 +3,7 @@ Tranga - + @@ -97,6 +97,10 @@ +
+ +
+
@@ -108,7 +112,7 @@ cover - + Best Manga there is A Manga Glax @@ -122,7 +126,7 @@ Monitor ➕ Download Chapter 📥 - + diff --git a/Website/interaction.js b/Website/interaction.js index 9e22f0b..859de7f 100644 --- a/Website/interaction.js +++ b/Website/interaction.js @@ -40,6 +40,7 @@ const settingGotifyConfigured = document.querySelector("#gotifyConfigured"); const settingLunaseaConfigured = document.querySelector("#lunaseaConfigured"); const settingNtfyConfigured = document.querySelector("#ntfyConfigured"); const settingApiUri = document.querySelector("#settingApiUri"); +const settingMangaHoverCheckbox = document.querySelector("#mangaHoverCheckbox"); const newMangaPopup = document.querySelector("#newMangaPopup"); const newMangaConnector = document.querySelector("#newMangaConnector"); const newMangaTitle = document.querySelector("#newMangaTitle"); @@ -80,6 +81,19 @@ function Setup(){ ResetContent(); UpdateJobs(); + GetSettings().then((json) => { + //console.log(json); + settingDownloadLocation.innerText = json.downloadLocation; + settingApiUri.placeholder = apiUri; + //console.log(json.styleSheet); + if (json.styleSheet == 'hover') { + settingMangaHoverCheckbox.checked = true; + document.getElementById('pagestyle').setAttribute('href', 'styles/style_mangahover.css'); + } else { + settingMangaHoverCheckbox.checked = false; + document.getElementById('pagestyle').setAttribute('href', 'styles/style_default.css'); + } + }); setInterval(() => { UpdateJobs(); }, 1000); @@ -279,11 +293,20 @@ function OpenSettings(){ settingNtfyAuth.value = ""; settingNtfyEndpoint.value = ""; settingApiUri.value = ""; + settingMangaHoverCheckbox.checked = false; GetSettings().then((json) => { //console.log(json); settingDownloadLocation.innerText = json.downloadLocation; settingApiUri.placeholder = apiUri; + //console.log(json.styleSheet); + if (json.styleSheet == 'hover') { + settingMangaHoverCheckbox.checked = true; + document.getElementById('pagestyle').setAttribute('href', 'styles/style_mangahover.css'); + } else { + settingMangaHoverCheckbox.checked = false; + document.getElementById('pagestyle').setAttribute('href', 'styles/style_default.css'); + } }); GetLibraryConnectors().then((json) => { //console.log(json); @@ -341,6 +364,15 @@ function UpdateSettings(){ setCookie("apiUri", apiUri); Setup(); } + + // If the checkbox is checked, set the style to style_mangahover.css and + if (document.getElementById("mangaHoverCheckbox").checked == true){ + ChangeStyleSheet('hover') + //console.log('Changing theme to mangahover') + } else { + ChangeStyleSheet('default'); + //console.log('Changing theme to default') + } if(settingKomgaUrl.value != "" && settingKomgaUser.value != "" && @@ -391,7 +423,6 @@ function UpdateJobs(){ monitoringJobsCount = json.length; } }); - GetWaitingJobs().then((json) => { jobsQueuedTag.innerText = json.length; diff --git a/Website/style.css b/Website/styles/style_default.css similarity index 91% rename from Website/style.css rename to Website/styles/style_default.css index 486a5dd..19c0f52 100644 --- a/Website/style.css +++ b/Website/styles/style_default.css @@ -223,11 +223,22 @@ publication-information { justify-content: start; } +publication-details { + display: flex; + flex-direction: column; + justify-content: start; +} + publication-information * { z-index: 1; color: var(--accent-color); } +publication-details * { + z-index: 1; + color: var(--accent-color); +} + connector-name{ width: fit-content; margin: 10px 0; @@ -408,48 +419,48 @@ publication-viewer img { z-index: 0; } -publication-viewer publication-information > * { +publication-viewer publication-details > * { margin: 5px 0; } -publication-viewer publication-information publication-name { +publication-viewer publication-details publication-name { width: initial; overflow-x: scroll; white-space: nowrap; scrollbar-width: none; } -publication-viewer publication-information publication-tags::before { +publication-viewer publication-details publication-tags::before { content: "Tags"; display: block; font-weight: bolder; } -publication-viewer publication-information publication-tags { +publication-viewer publication-details publication-tags { overflow-x: scroll; white-space: nowrap; scrollbar-width: none; } -publication-viewer publication-information publication-author::before { +publication-viewer publication-details publication-author::before { content: "Author: "; font-weight: bolder; } -publication-viewer publication-information publication-description::before { +publication-viewer publication-details publication-description::before { content: "Description"; display: block; font-weight: bolder; } -publication-viewer publication-information publication-description { +publication-viewer publication-details publication-description { font-size: 12pt; margin: 5px 0; height: 145px; overflow-x: scroll; } -publication-viewer publication-information publication-interactions { +publication-viewer publication-details publication-interactions { display: flex; flex-direction: row; justify-content: end; @@ -457,25 +468,25 @@ publication-viewer publication-information publication-interactions { width: 100%; } -publication-viewer publication-information publication-interactions > * { +publication-viewer publication-details publication-interactions > * { margin: 0 10px; font-size: 16pt; cursor: pointer; } -publication-viewer publication-information publication-interactions publication-starttask { +publication-viewer publication-details publication-interactions publication-starttask { color: var(--secondary-color); } -publication-viewer publication-information publication-interactions publication-delete { +publication-viewer publication-details publication-interactions publication-delete { color: red; } -publication-view publication-information publication-interactions publication-canceltask { +publication-view publication-details publication-interactions publication-canceltask { color: yellow; } -publication-viewer publication-information publication-interactions publication-add { +publication-viewer publication-details publication-interactions publication-add { color: limegreen; } diff --git a/Website/styles/style_mangahover.css b/Website/styles/style_mangahover.css new file mode 100644 index 0000000..949a185 --- /dev/null +++ b/Website/styles/style_mangahover.css @@ -0,0 +1,661 @@ +:root{ + --background-color: #030304; + --second-background-color: #fff; + --primary-color: #f5a9b8; + --secondary-color: #5bcefa; + --accent-color: #fff; + --topbar-height: 60px; + box-sizing: border-box; +} + +body{ + padding: 0; + margin: 0; + height: 100vh; + background-color: var(--background-color); + font-family: "Inter", sans-serif; + overflow-x: hidden; +} + +wrapper { + display: flex; + flex-flow: column; + flex-wrap: nowrap; + height: 100vh; +} + +background-placeholder{ + background-color: var(--second-background-color); + opacity: 1; + position: absolute; + width: 100%; + height: 100%; + border-radius: 0 0 5px 0; + z-index: -1; +} + +topbar { + display: flex; + align-items: center; + height: var(--topbar-height); + background-color: var(--secondary-color); + z-index: 100; + box-shadow: 0 0 20px black; +} + +titlebox { + position: relative; + display: flex; + margin: 0 0 0 40px; + height: 100%; + align-items:center; + justify-content:center; +} + +titlebox span{ + cursor: default; + font-size: 24pt; + font-weight: bold; + background: linear-gradient(150deg, var(--primary-color), var(--accent-color)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + margin-left: 20px; +} + +titlebox img { + height: 100%; + margin-right: 10px; + cursor: grab; +} + +spacer{ + flex-grow: 1; +} + +searchdiv{ + display: block; + margin: 0 10px 0 0; +} + +#searchbox { + padding: 3px 10px; + border: 0; + border-radius: 4px; + font-size: 14pt; + width: 250px; +} + +#settingscog { + cursor: pointer; + margin: 0px 30px; + height: 50%; + filter: invert(100%) sepia(0%) saturate(7465%) hue-rotate(115deg) brightness(116%) contrast(101%); +} + +viewport { + position: relative; + display: flex; + flex-flow: row; + flex-wrap: nowrap; + flex-grow: 1; + height: 100%; + overflow-y: scroll; +} + +footer { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + width: 100%; + height: 40px; + align-items: center; + justify-content: center; + background-color: var(--primary-color); + align-content: center; +} + +footer > div { + height: 100%; + margin: 0 30px; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + cursor: pointer; +} + +footer > div > *{ + height: 40%; + margin: 0 5px; +} + +#madeWith { + flex-grow: 1; + text-align: right; + margin-right: 20px; + cursor: url("media/blahaj.png"), grab; +} + +content { + position: relative; + flex-grow: 1; + border-radius: 5px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: start; + align-content: start; +} + +#settingsPopup{ + z-index: 300; +} + +#settingsPopup popup-content{ + flex-direction: column; + align-items: start; + margin: 15px 10px; +} + +#settingsPopup popup-content > * { + margin: 5px 10px; +} + +#settingsPopup popup-content .title { + font-weight: bolder; +} + +#addPublication { + cursor: pointer; + background-color: var(--secondary-color); + width: 180px; + height: 300px; + border-radius: 5px; + margin: 10px 10px; + padding: 15px 20px; + position: relative; +} + +#addPublication p{ + width: 100%; + text-align: center; + font-size: 150pt; + vertical-align: middle; + line-height: 300px; + margin: 0; + color: var(--accent-color); +} + +.pill { + flex-grow: 0; + height: 14pt; + font-size: 12pt; + border-radius: 9pt; + background-color: var(--primary-color); + padding: 2pt 17px; + color: black; +} + +publication{ + cursor: pointer; + background-color: var(--secondary-color); + width: 180px; + height: 300px; + border-radius: 5px; + margin: 10px 10px; + padding: 15px 20px; + position: relative; + flex-shrink: 0; +} + +publication:hover { + background-color: black; +} + +publication:hover::after{ + background: linear-gradient(rgba(0,0,0,0.8), rgba(0, 0, 0, 0.7),rgba(0, 0, 0, 0.2)); +} + +publication:hover > publication-information { + display: flex; + opacity:1; +} + +publication::after{ + content: ''; + position: absolute; + left: 0; top: 0; + border-radius: 5px; + width: 100%; height: 100%; +} + +publication-information { + display: none; + flex-direction: column; + justify-content: start; +} + +publication-information * { + z-index: 1; + color: var(--accent-color); +} + +connector-name{ + width: fit-content; + margin: 10px 0; +} + +publication-name{ + width: fit-content; + font-size: 16pt; + font-weight: bold; +} + +publication-details { + display: flex; + flex-direction: column; + justify-content: start; +} + +publication-details * { + z-index: 1; + color: var(--accent-color); +} + +publication img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; + z-index: 0; + border-radius: 5px; +} + +popup{ + display: none; + width: 100%; + min-height: 100%; + top: 0; + left: 0; + position: fixed; + z-index: 2; + flex-direction: column; +} + + +popup popup-window { + position: absolute; + z-index: 3; + left: 25%; + top: 100px; + width: 50%; + display: flex; + flex-direction: column; + background-color: var(--second-background-color); + border-radius: 3px; + overflow: hidden; +} + +popup popup-window popup-title { + height: 30px; + font-size: 14pt; + font-weight: bolder; + padding: 5px 10px; + margin: 0; + display: flex; + align-items: center; + background-color: var(--primary-color); + color: var(--accent-color) +} + +popup popup-window popup-content{ + margin: 15px 10px; + display: flex; + align-items: center; + justify-content: space-evenly; +} + +popup popup-window popup-content div > * { + margin: 2px 3px 0 0; +} + +popup popup-window popup-content input, select { + padding: 3px 4px; + width: 130px; + border: 1px solid lightgrey; + background-color: var(--accent-color); + border-radius: 3px; +} + +#newMangaPopup > div { + z-index: 3; + position: relative; +} + +#newMangaPopup > #newMangaPopupSelector { + width: 600px; + height: 40px; + margin: 80px auto 0; +} + +#newMangaPopup > div > #newMangaConnector, #newMangaTitle, #newMangaTranslatedLanguage { + margin: 0; + display: inline-block; + height: 40px; +} + +#newMangaPopup #newMangaConnector { + width: 100px; + padding: 0 0 0 5px; + border-radius: 5px 0 0 5px; + border: 0; + border-right: 1px solid darkgray; +} + +#newMangaPopup #newMangaTitle{ + width: 445px; + padding: 0 5px 0 5px; + border: 0; +} + +#newMangaPopup #newMangaTranslatedLanguage { + width: 45px; + border-radius: 0 5px 5px 0; + border: 0; + border-left: 1px solid darkgray; + margin-left: -5px; +} + +#newMangaResult { + display: none; + flex-direction: row; + justify-content: flex-start; + margin: 5px auto 0; + border-radius: 5px; + padding: 5px; + width: min-content; + max-width: 98%; + max-height: 400px; + overflow-x: scroll; + overflow-y: hidden; +} + +blur-background { + width: 100%; + height: 100%; + position: absolute; + left: 0; + background: rgba(245, 169, 184, 0.58); + box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1); + backdrop-filter: blur(4.5px); + -webkit-backdrop-filter: blur(4.5px); +} + +#publicationViewerPopup{ + 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; + position: fixed; + bottom: 58px; + left: 20px; + background-color: var(--second-background-color); + z-index: 8; + border-radius: 5px; + max-height: 400px; +} + +footer-tag-content{ + position: relative; + max-height: 400px; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + overflow-y: scroll; +} + +footer-tag-content > * { + margin: 2px 5px; +} + +footer-tag-popup::before{ + content: ""; + width: 0; + height: 0; + position: absolute; + border-right: 10px solid var(--second-background-color); + border-left: 10px solid transparent; + border-top: 10px solid var(--second-background-color); + border-bottom: 10px solid transparent; + left: 0; + bottom: -17px; + border-radius: 0 0 0 5px; +} + +#loaderdiv { + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 100%; + z-index: 200; +} + +#loader { + border: 16px solid transparent; + border-top: 16px solid var(--secondary-color); + border-bottom: 16px solid var(--primary-color); + border-radius: 50%; + width: 120px; + height: 120px; + animation: spin 2s linear infinite; + position: absolute; + left: calc(50% - 60px); + top: calc(50% - 120px); + z-index: 201; +} + +#loaderText { + position: relative; + margin: 0 auto; + top: calc(50% + 80px); + z-index: 201; + text-align: center; + color: var(--second-background-color); + font-size: 20pt; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +#jobStatusView { + z-index: 50; +} + +#jobStatusView > popup-window { + top: 80px; + width: 50%; + max-height: calc(100% - 140px); + display: flex; + flex-direction: row; + flex-wrap: nowrap; + background-color: transparent; +} + +#jobStatusView > popup-window > div { + overflow-y: scroll; + overflow-x: hidden; + width: 50%; + margin: 0; + max-height: 100%; +} + +#jobStatusView > popup-window > div > div { + overflow-x: hidden; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + width: 100%; + margin: 0; +} + +.jobWrapper { + width: 90%; + margin: 2px 5%; + height: 100px; + position: relative; + flex-shrink: 0; + background-color: rgba(187,187,187,0.4); + border-radius: 3px; +} + +.jobWrapper > .jobImage { + height: 90%; + width: 20%; + left: 5px; + object-fit: contain; + position: absolute; + top: 5%; +} + +.jobWrapper > .jobTitle { + position: absolute; + left: calc(20% + 10px); + top: 5px; +} + +.jobWrapper > .jobProgressBar { + position: absolute; + left: calc(20% + 10px); + bottom: calc(12pt + 10px); + width: calc(80% - 20px); + height: 10px; +} + +.jobWrapper > .jobProgressSpan { + position: absolute; + right: 10px; + bottom: calc(12pt + 20px); + width: 60%; + text-align: right; +} + +.jobWrapper > .jobCancel { + position: absolute; + right: 10px; + bottom: 5px; + font-size: 12pt; + color: var(--secondary-color); + cursor: pointer; +} \ No newline at end of file