diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/src/index.liquid b/src/index.liquid new file mode 100644 index 0000000..72be39d --- /dev/null +++ b/src/index.liquid @@ -0,0 +1,84 @@ +
+ {% if is_category or is_tag %} +

{{ page_title }}

+ {%- if subtitle %} +

{{ subtitle }}

+ {%- endif %} + {% endif %} + {%- for post in model.posts %} +
+

+ + {{ post.title }} + +

+ + {{ post.text }} +
+ {%- endfor %} + +
+ \ No newline at end of file diff --git a/src/layout-partial.liquid b/src/layout-partial.liquid new file mode 100644 index 0000000..0128a05 --- /dev/null +++ b/src/layout-partial.liquid @@ -0,0 +1,16 @@ + + + + + + {%- if is_home -%} + {{ web_log.name }}{% if web_log.subtitle %} | {{ web_log.subtitle.value }}{% endif %} + {%- else -%} + {{ page_title | strip_html }}{% if page_title and page_title != "" %} » {% endif %}{{ web_log.name }} + {%- endif -%} + + + + {{ content }} + + diff --git a/src/layout.liquid b/src/layout.liquid new file mode 100644 index 0000000..9b5091c --- /dev/null +++ b/src/layout.liquid @@ -0,0 +1,151 @@ + + + + + + + + {%- if is_home -%} + {{ web_log.name }}{% if web_log.subtitle %} | {{ web_log.subtitle.value }}{% endif %} + {%- else -%} + {{ page_title | strip_html }}{% if page_title and page_title != "" %} » {% endif %}{{ web_log.name }} + {%- endif -%} + + + + + + + {% page_head -%} + + + +

Loading...

+
{{ content }}
+ + + + {% page_foot %} + + diff --git a/src/single-page.liquid b/src/single-page.liquid new file mode 100644 index 0000000..5ed8652 --- /dev/null +++ b/src/single-page.liquid @@ -0,0 +1,6 @@ +
+
+

{{ page.title }}

+ {{ page.text }} +
+
diff --git a/src/single-post.liquid b/src/single-post.liquid new file mode 100644 index 0000000..e121f50 --- /dev/null +++ b/src/single-post.liquid @@ -0,0 +1,77 @@ +{%- assign post = model.posts | first -%} +
+
+

{{ post.title }}

+ +
{{ post.text }}
+ {%- assign cat_count = post.category_ids | size -%} + {% if cat_count > 0 -%} +

+ Categorized   + {% for cat_id in post.category_ids -%} + {% assign cat = categories | where: "id", cat_id | first %} + + + + {{ cat.name }} +     + + {%- endfor %} +

+ {%- endif %} + {%- assign tag_count = post.tags | size -%} + {% if tag_count > 0 -%} +

+ Tagged   + {% for tag in post.tags %} + +     + + {%- endfor %} +

+ {%- endif %} +
+
+ +
+
\ No newline at end of file diff --git a/src/version.txt b/src/version.txt new file mode 100644 index 0000000..1de3001 --- /dev/null +++ b/src/version.txt @@ -0,0 +1,2 @@ +Daniel J. Summers +1 \ No newline at end of file diff --git a/src/wwwroot/csurams.png b/src/wwwroot/csurams.png new file mode 100644 index 0000000..c17fa2a Binary files /dev/null and b/src/wwwroot/csurams.png differ diff --git a/src/wwwroot/djs.js b/src/wwwroot/djs.js new file mode 100644 index 0000000..fbb64b0 --- /dev/null +++ b/src/wwwroot/djs.js @@ -0,0 +1,18 @@ +djs = { + + displayVotd: res => { + const votd = res.votd + const votdItem = document.querySelector('.votd-item') + votdItem.querySelector('.verse').innerHTML = votd.text + const reference = votdItem.querySelector('.votd-reference') + reference.href = votd.permalink.replace('&', '&') + const ref = votd.display_ref + const isPassage = ref.indexOf(',') >= 0 || ref.indexOf('-') >= 0 || ref.indexOf(';') >= 0 + if (isPassage) { + document.querySelector('.votd-heading').innerText = 'Passage of the Day' + } + reference.innerHTML = ref + votdItem.querySelector('.version-link').href = votd.copyrightlink.replace('&', '&').replace('&', '&') + votdItem.style.display = 'block' + } +} diff --git a/src/wwwroot/style.css b/src/wwwroot/style.css new file mode 100644 index 0000000..37b92e0 --- /dev/null +++ b/src/wwwroot/style.css @@ -0,0 +1,345 @@ +@import "https://fonts.googleapis.com/css?family=Quicksand|Oswald"; +:root { + --text-color: rgb(0, 0, 0); + --accent-color: rgb(21, 140, 186); + --bkg-color: rgb(68, 68, 68); + --hdr-text-color: hsl(0, 0%, 100%); + --hdr-bkg-color: hsl(0, 0%, 95%); + --item-bkg-color: hsl(0, 0%, 100%); + --overlay-bkg-color: rgba(0, 0, 0, .5) +} +@media ( prefers-color-scheme: dark ) { + :root { + --text-color: rgb(210, 210, 210); + --hdr-bkg-color: hsl(0, 0%, 7%); + --item-bkg-color: hsl(0, 0%, 12%); + --overlay-bgk-color: rgba(255, 255, 255, .2) + } +} +html { + background-color: var(--bkg-color); +} +body { + font-family: Quicksand, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 1.2rem; + background-color: var(--bkg-color); + margin: 0; + color: var(--text-color); +} +a:link, a:visited { + color: var(--accent-color); + text-decoration: none; +} +a:hover { + text-decoration: underline; +} + +h1, h2, h3, h4, p { + margin-top: 0; + margin-bottom: 1rem; +} +h1, h2, h3, h4 { + font-family: Oswald, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} +h1 { + font-size: 2rem; +} +h1 a:link, h1 a:visited { + color: var(--accent-color); +} +blockquote { + margin: 1rem 2rem 1rem 1rem; + border-left: solid 3px var(--accent-color); + padding-left: 1rem; +} +sup, sub { + font-size: smaller; +} +sup { + vertical-align: text-top; +} +sub { + vertical-align: baseline; +} +main { + display: grid; + grid-template-columns: 1fr; + grid-template-rows: auto; +} +.content img { + max-width: 100%; + border-radius: 1rem; +} +.content img.flat { + border-radius: 0; +} + +/* ----- SITE HEADER ----- */ +.site-header p, footer.part-1 p { + margin-top: .8rem; + margin-right: 1.2rem; + color: var(--hdr-text-color); +} +.site-header p a:link, .site-header p a:visited { + font-size: 1rem; + color: var(--hdr-text-color); +} +.site-header { + min-height: 4rem; + padding: 0 .4rem; + margin-bottom: 1rem; + display: flex; + flex-flow: row wrap; + align-items: flex-end; + background-image: -webkit-gradient(linear, left top, left bottom, from(var(--accent-color)), to(var(--bkg-color))); + background-image: -webkit-linear-gradient(top, var(--accent-color), var(--bkg-color)); + background-image: -moz-linear-gradient(top, var(--accent-color), var(--bkg-color)); + background-image: linear-gradient(to bottom, var(--accent-color), var(--bkg-color)); +} +.site-header p { + margin: 0; +} +.site-header p a.nav-home { + font-family: Oswald, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-weight: bold; + margin-left: .2rem; + color: var(--hdr-text-color); + font-size: 1.5rem; +} +.nav-spacer { + flex-grow: 1; +} + +/* ----- CONTENT STYLES ----- */ +.index-title { + color: var(--hdr-text-color); + border-bottom: solid 2px var(--accent-color); +} +.content { + max-width: 60rem; + margin: 0 auto auto; + padding: 0 .4rem; +} +.item { + border: solid 1px black; + border-radius: .5rem; + background-color: var(--item-bkg-color); + padding: .4rem; + margin-bottom: 1.2rem; +} +.item-heading { + margin: -.4rem -.4rem .4rem; + border-top-left-radius: .5rem; + border-top-right-radius: .5rem; + border-bottom: solid 1px darkgray; + padding-bottom: .2rem; + text-align: center; + color: var(--accent-color); + background-color: var(--hdr-bkg-color); +} +.post-meta { + display: flex; + flex-flow: row wrap; + justify-content: space-evenly; +} +.pager { + display: flex; + flex-flow: row wrap; + justify-content: space-between; + padding: 0; +} +.pager li { + list-style-type: none; + display: inline-block; +} + +/* ----- SIDEBAR STYLES ----- */ +.sidebar { + font-size: 1rem; +} +.votd-item { + display: none; +} +.votd-credits { + margin-top: 1rem; + text-align: right; +} +.cat-list { + padding-left: 0 +} +.cat-list ul { + padding-left: 1rem; +} +.cat-list li { + list-style-type: none; + padding-bottom: .25rem; +} +.cat-list ul li ul > li { + padding-top: .2rem; +} +.cat-list-count { + font-size: .8rem; + padding-left: .4rem; +} +.cat-list-count:before { + content: '('; +} +.cat-list-count:after { + content: ')'; +} + +/* ----- FOOTER STYLES ----- */ +footer.part-1 { + background-image: -webkit-gradient(linear, left top, left bottom, from(var(--bkg-color)), to(var(--accent-color))); + background-image: -webkit-linear-gradient(top, var(--bkg-color), var(--accent-color)); + background-image: -moz-linear-gradient(top, var(--bkg-color), var(--accent-color)); + background-image: linear-gradient(to bottom, var(--bkg-color), var(--accent-color)); + min-height: 2rem; + display: flex; + flex-flow: row wrap; + justify-content: space-around; + align-items: center; + padding-bottom: 1rem; +} +footer.part-2 { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-around; + background-image: -webkit-gradient(linear, left top, left bottom, from(var(--accent-color)), to(var(--bkg-color))); + background-image: -webkit-linear-gradient(top, var(--accent-color), var(--bkg-color)); + background-image: -moz-linear-gradient(top, var(--accent-color), var(--bkg-color)); + background-image: linear-gradient(to bottom, var(--accent-color), var(--bkg-color)); + padding-bottom: .4rem; +} +footer.part-2 > div { + flex-basis: 30%; + min-width: 400px; +} +footer.part-2 sup { + line-height: 1; +} +footer.part-3 { + padding: 0 .4rem 1rem .4rem; + background-color: var(--bkg-color); +} +.copy, .copy a:link, .copy a:visited { + font-size: 1rem; + color: #dddddd; + text-decoration: none; +} +.copy a:hover { + text-decoration: underline; +} +.football-panel { + display: flex; + flex-flow: row nowrap; + justify-content: space-around; + align-items: center; +} +.football-panel div { + text-align: center; + line-height: 1.6rem; +} + +/* ----- UTILITY CLASSES ----- */ +.desktop { + display: none; +} +.float-left { + float: left; + padding-right: .5rem; +} +.float-right { + float: right; + padding-left: .5rem; +} +.small-caps { + font-variant: small-caps; +} +.text-center { + text-align: center; +} +.no-wrap { + white-space: nowrap; +} + +/* ----- OVERLAY ----- */ +.load-overlay { + position: fixed; + top: 4rem; + left: 1rem; + width: 50%; + height: 0; + z-index: 2000; + background-color: var(--overlay-bgk-color); + border-radius: 1rem; + animation: fadeOut .25s ease-in-out; + overflow: hidden; +} +.load-overlay h1 { + color: white; + background-color: rgba(0, 0, 0, .75); + margin: 1.5rem auto; + border-radius: 1rem; + width: 50%; + padding: 1rem; + text-align: center; +} +.load-overlay.htmx-request { + height: unset; + animation: fadeIn .25s ease-in-out; +} +@keyframes fadeIn { + 0% { + opacity: 0; + height: unset; + } + 100% { + opacity: 1; + height: unset; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + height: unset; + } + 99% { + opacity: 0; + height: unset; + } + 100% { + opacity: 0; + height: 0; + } +} + +/* ----- SCALE UP STYLES ----- */ +@media screen and ( min-width: 50rem ) { + main { + grid-template-columns: 1fr 16rem; + } + .desktop { + display: unset; + } + .mobile { + display: none; + } + .site-header p { + margin-inline-end: 1.2rem; + margin-bottom: 1rem; + } + .load-overlay { + width: 25%; + } + main > .single { + grid-column: 1 / -1; + } + .sidebar { + max-width: 15rem; + } + footer.part-2 { + grid-gap: 0; + } +} diff --git a/src/wwwroot/tennessee.png b/src/wwwroot/tennessee.png new file mode 100644 index 0000000..d27d93c Binary files /dev/null and b/src/wwwroot/tennessee.png differ