diff --git a/theme/default/home.hbs b/theme/default/home.hbs index 78688af..401f1ab 100644 --- a/theme/default/home.hbs +++ b/theme/default/home.hbs @@ -25,6 +25,7 @@ + {{> modal.hbs }} \ No newline at end of file diff --git a/theme/default/modal.hbs b/theme/default/modal.hbs new file mode 100644 index 0000000..3e8d890 --- /dev/null +++ b/theme/default/modal.hbs @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/theme/default/post.hbs b/theme/default/post.hbs index f5557a6..650da05 100644 --- a/theme/default/post.hbs +++ b/theme/default/post.hbs @@ -16,6 +16,7 @@ + {{> modal.hbs }} \ No newline at end of file diff --git a/theme/default/static/script.js b/theme/default/static/script.js index 85ba7af..ca4f51d 100644 --- a/theme/default/static/script.js +++ b/theme/default/static/script.js @@ -16,6 +16,20 @@ window.onbeforeunload = (ev) => { window.onload = function() { let content = document.getElementsByClassName("content"); if (content.length == 0) return; + // View large image in modal when clicked + var modal = document.getElementById("myModal"); + var modalImg = document.getElementById("img01"); + document.querySelectorAll(".content img").forEach((elem) => { + elem.onclick = (ev) => { + modal.style.display = "block"; + modalImg.src = elem.src; + }; + }); + var span = document.getElementsByClassName("close")[0]; + span.onclick = () => { + modal.style.display = "none"; + }; + // Table-of-Contents generation // Don't do this on mobile; it's horrible if (window.matchMedia("(max-width: 1000px)").matches) return; diff --git a/theme/default/static/style.css b/theme/default/static/style.css index 1714e57..a293648 100644 --- a/theme/default/static/style.css +++ b/theme/default/static/style.css @@ -274,6 +274,13 @@ h5 { .content img { max-width: calc(100% - 10px); object-fit: contain; + cursor: pointer; + transition: opacity 0.3s; +} + +.post img:hover, +.content img:hover { + opacity: 0.7; } .toc-wrapper { @@ -387,4 +394,76 @@ h5 { .with-divider.with-divider-center-mobile::after { margin-left: calc(50% - 20px) !important; } -} \ No newline at end of file +} + +/* Modal */ +/* The Modal (background) */ +.modal { + display: none; /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 1; /* Sit on top */ + padding-top: 100px; /* Location of the box */ + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + background-color: rgb(0,0,0); /* Fallback color */ + background-color: rgba(0,0,0,0.9); /* Black w/ opacity */ + } + + /* Modal Content (Image) */ + .modal-content { + margin: auto; + display: block; + width: 80%; + max-width: 700px; + } + + /* Caption of Modal Image (Image Text) - Same Width as the Image */ + #caption { + margin: auto; + display: block; + width: 80%; + max-width: 700px; + text-align: center; + color: #ccc; + padding: 10px 0; + height: 150px; + } + + /* Add Animation - Zoom in the Modal */ + .modal-content, #caption { + animation-name: zoom; + animation-duration: 0.6s; + } + + @keyframes zoom { + from {transform:scale(0)} + to {transform:scale(1)} + } + + /* The Close Button */ + .close { + position: absolute; + top: 15px; + right: 35px; + color: #f1f1f1; + font-size: 40px; + font-weight: bold; + transition: 0.3s; + } + + .close:hover, + .close:focus { + color: #bbb; + text-decoration: none; + cursor: pointer; + } + + /* 100% Image Width on Smaller Screens */ + @media only screen and (max-width: 700px){ + .modal-content { + width: 100%; + } + } \ No newline at end of file