diff --git a/mirva/__init__.py b/mirva/__init__.py index 0fe40ab..652152a 100644 --- a/mirva/__init__.py +++ b/mirva/__init__.py @@ -1,4 +1,4 @@ -__version__ = "20230928.0" +__version__ = "20230928.1" def get_version(): diff --git a/mirva/mirva.py b/mirva/mirva.py index e19d721..ed197d4 100755 --- a/mirva/mirva.py +++ b/mirva/mirva.py @@ -252,7 +252,7 @@ Released : 20110306
-
+
{intro}
@@ -281,14 +281,14 @@ Released : 20110306 image = urllib.parse.quote(image) if self.video_match.match(image): return """ -
+
-
{title}
+
{title}
 
{content}
""".format( @@ -296,12 +296,12 @@ Released : 20110306 ) return """ -
+
-
{title}
+
{title}
 
{content}
""".format( diff --git a/mirva/resources/mirva.css b/mirva/resources/mirva.css index 017252f..b556e52 100644 --- a/mirva/resources/mirva.css +++ b/mirva/resources/mirva.css @@ -1,4 +1,3 @@ - /* Design by TEMPLATED http://templated.co @@ -11,7 +10,7 @@ Released for free under the Creative Commons Attribution License --foreground: #d6d6d6; --headercolor: #ffffff; --title-text: #000000; - --title-background: rgba(255,255,255,0.7); + --title-background: rgba(255, 255, 255, 0.7); --links: #ff8300; --subtitle-text: #ffffff; } @@ -30,118 +29,123 @@ Released for free under the Creative Commons Attribution License */ body { - margin: 0; - padding: 0; - background-color: var(--background); - font-family: Arial, Helvetica, sans-serif; - font-size: 12px; - color: var(--foreground); - overflow-x: hidden; + margin: 0; + padding: 0; + background-color: var(--background); + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: var(--foreground); + overflow-x: hidden; } -h1, h2, h3 { - margin: 0; - padding: 0; - font-weight: normal; - color: var(--headercolor); +h1, +h2, +h3 { + margin: 0; + padding: 0; + font-weight: normal; + color: var(--headercolor); } h1 { - font-size: 2em; + font-size: 2em; } h2 { - font-size: 2.4em; + font-size: 2.4em; } h3 { - font-size: 1.6em; + font-size: 1.6em; } -p, ul, ol { - margin-top: 0; - line-height: 180%; +p, +ul, +ol { + margin-top: 0; + line-height: 180%; } -ul, ol { -} +ul, +ol {} a { - text-decoration: none; - color: var(--links); + text-decoration: none; + color: var(--links); } -a:hover { -} +a:hover {} #wrapper { - width: 100vw; - margin: 0 auto; - padding: 0; + width: 100vw; + margin: 0 auto; + padding: 0; } /* Header */ #header { - clear: both; - width: 100vw; - height: 330px; - margin: 0 auto; - padding: 0px; - background: url(banner.jpg) no-repeat center center; - background-size: cover; + clear: both; + width: 100vw; + height: 330px; + margin: 0 auto; + padding: 0px; + background: url(banner.jpg) no-repeat center center; + background-size: cover; } /* Logo */ #logo { - margin: 0; - padding: 0px 0px 0px 0px; - color: #000000; + margin: 0; + padding: 0px 0px 0px 0px; + color: #000000; } -#logo h1, #logo p { - margin: 0; - padding: 0; - color: var(--subtitle-text); +#logo h1, +#logo p { + margin: 0; + padding: 0; + color: var(--subtitle-text); } #logo #page_title { - padding-top: 160px; + padding-top: 160px; } #logo #page_title h1 { - letter-spacing: -1px; - font-size: 3.8em; - word-break: break-all; - text-align: center; - color: var(--title-text); - background-color: var(--title-background); + letter-spacing: -1px; + font-size: 3.8em; + word-break: break-all; + text-align: center; + color: var(--title-text); + background-color: var(--title-background); } #logo #page_title p { - margin: 0; - padding: 0px 0 0 60px; - font: normal 14px Georgia, "Times New Roman", Times, serif; - font-style: italic; - color: var(--subtitle-text); + margin: 0; + padding: 0px 0 0 60px; + font: normal 14px Georgia, "Times New Roman", Times, serif; + font-style: italic; + color: var(--subtitle-text); } #logo a { - border: none; - background: none; - text-decoration: none; - color: #FFFFFF; + border: none; + background: none; + text-decoration: none; + color: #FFFFFF; } /* Page */ #page { - width: calc(100vw - 128px); - margin: 0 auto; - padding: 0px 0px 0px 0px; + width: calc(100vw - 128px); + margin: 0 auto; + padding: 0px 0px 0px 0px; } + @media only screen and (max-width: 800px) { #page { width: 100vw; @@ -149,73 +153,76 @@ a:hover { } #page-bgtop { - padding: 20px 0px; + padding: 20px 0px; } -#page-bgbtm { -} +#page-bgbtm {} /* Content */ #content { - width: 100%; - padding: 30px 0px 0px 0px; + width: 100%; + padding: 30px 0px 0px 0px; } .post { - margin-bottom: 15px; - border-top: lightgray dashed 2px; - padding-top: 2px; + margin-bottom: 15px; + border-top: lightgray dashed 2px; + padding-top: 2px; } -.post-bgtop { -} +.post-bgtop {} -.post-bgbtm { -} +.post-bgbtm {} .post .title { - height: 38px; - margin-bottom: 10px; - padding: 12px 0 0 0px; - letter-spacing: -.5px; - color: #000000; + height: 38px; + margin-bottom: 10px; + padding: 12px 0 0 0px; + letter-spacing: -.5px; + color: #000000; } .post .title a { - color: #000000; - border: none; + color: #000000; + border: none; } .post .meta { - padding: 5px 0px 5px 0px; - text-align: center; - font-family: Arial, Helvetica, sans-serif; - font-size: 13px; - font-weight: bold; + padding: 5px 0px 5px 0px; + text-align: center; + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-weight: bold; } -.post .meta .name { - display: inline; +.post .meta .post_title { + display: inline; } -.post .meta .posted { +.post_title { + cursor: pointer; } -.post .meta a { +.post_title:hover { + color: var(--links); } +.post .meta .posted {} + +.post .meta a {} + .post .entry { - padding: 0px 5px 20px 5px; - text-align: justify; - font-size: 14px; - font-style: italic; + padding: 0px 5px 20px 5px; + text-align: justify; + font-size: 14px; + font-style: italic; } .links { - padding-top: 20px; - font-size: 12px; - font-weight: bold; + padding-top: 20px; + font-size: 12px; + font-weight: bold; } .center { @@ -229,6 +236,7 @@ a:hover { max-width: calc(100vw - 128px); display: inline; } + @media only screen and (max-width: 800px) { .post_image { max-height: calc(100vh - 2px); @@ -243,16 +251,19 @@ a:hover { height: 27px; float: right; } + @media only screen and (max-width: 800px) { .navigation { display: none; } } + .navigation_button { cursor: pointer; margin-left: 10px; box-shadow: 4px 4px 5px var(--button-shadow); } + .navigation_button:hover { cursor: pointer; box-shadow: 2px 2px 2px var(--button-shadow); @@ -264,4 +275,4 @@ a:hover { .float_down { float: left; -} +} \ No newline at end of file diff --git a/mirva/resources/mirva.js b/mirva/resources/mirva.js index 0a250f8..f27dc5f 100644 --- a/mirva/resources/mirva.js +++ b/mirva/resources/mirva.js @@ -11,6 +11,7 @@ r(function() { defaultScroll = typeof document.body.dataset.scroll === "string" ? document.body.dataset.scroll : "smooth"; create_nav(); document.onkeydown = keyboard_entry; + scroll_by_url(); }); function create_nav() { @@ -29,6 +30,12 @@ function create_nav() { navis[i].appendChild(create_button("down", navis[i + 1], i + 1)); } } + let titles = document.getElementsByClassName("post_title"); + for (let i = 0; i < navis.length; i++) { + titles[i].onclick = function() { + scroll_to(this.parentElement.parentElement); + } + } } function create_button(direction, to, next) { @@ -38,9 +45,7 @@ function create_button(direction, to, next) { button.src = ".mirva/arrow_" + direction + ".png"; button.classList.add("navigation_button"); button.onclick = function() { - to.parentElement.scrollIntoView({ - behavior: defaultScroll - }); + scroll_to(to.parentElement); current = next; }; container.appendChild(button); @@ -111,6 +116,53 @@ function get_position() { } } +function scroll_to(element) { + /* Scroll smooth, if no frequent keypress */ + if (scrollTimer) { + element.scrollIntoView({ + behavior: "auto" + }); + clearTimeout(scrollTimer); + } else { + element.scrollIntoView({ + behavior: defaultScroll + }); + } + scrollTimer = setTimeout(function() { + scrollTimer = null; + }, + 1200 + ); + if (element.id.substring(0, 5) == 'post_') { + set_url_arg(element.id.substring(5)); + } +} + +function set_url_arg(i) { + window.history.replaceState('', document.head.title, `?i=${i}`); +} + +function get_url_arg() { + let url = new URL(window.location.href); + return url.searchParams.get('i'); +} + +function scroll_by_url() { + let name = get_url_arg(); + if (name) { + let element = document.getElementById(`post_${name}`); + if (element) { + // Just to be sure.. + setTimeout(function() { + scroll_to(element); + }, 1250); + setTimeout(function() { + scroll_to(element); + }, 10); + } + } +} + function keyboard_entry(ev) { let kC = ev.keyCode; let ctrlDown = ev.ctrlKey || ev.metaKey; @@ -142,20 +194,5 @@ function keyboard_entry(ev) { } current = Math.max(0, current); current = Math.min(posts.length - 1, current); - /* Scroll smooth, if no frequent keypress */ - if (scrollTimer) { - posts[current].parentElement.scrollIntoView({ - behavior: "auto" - }); - clearTimeout(scrollTimer); - } else { - posts[current].parentElement.scrollIntoView({ - behavior: defaultScroll - }); - } - scrollTimer = setTimeout(function() { - scrollTimer = null; - }, - 1200 - ); + scroll_to(posts[current].parentElement) } \ No newline at end of file