{{ page.title }}
+ +This line appears after every note.
+Notes mentioning this note
+ {% if page.backlinks.size > 0 %} ++ There are no notes linking to this note. +
+From 40cf711943f8d94421b1d6f15405c955351c8c9a Mon Sep 17 00:00:00 2001 From: walcutt <87273221+walcutt@users.noreply.github.com> Date: Mon, 30 Jan 2023 17:03:30 -0500 Subject: [PATCH] Initial commit --- .github/FUNDING.yml | 1 + .github/ISSUE_TEMPLATE/bug_report.md | 30 ++ .github/ISSUE_TEMPLATE/something-else.md | 10 + .gitignore | 15 + 404.html | 11 + Gemfile | 10 + Gemfile.lock | 86 +++++ LICENSE | 9 + README.md | 15 + _config.yml | 45 +++ _includes/footer.html | 1 + _includes/head.html | 48 +++ _includes/link-previews.html | 140 ++++++++ _includes/nav.html | 3 + _includes/notes_graph.html | 306 +++++++++++++++++ _layouts/default.html | 13 + _layouts/note.html | 47 +++ _layouts/page.html | 7 + _notes/accents.md | 5 + _notes/animals/cats.md | 21 ++ _notes/animals/tigers.md | 5 + _notes/consistency.md | 7 + _notes/move your body every day.md | 11 + _notes/your-first-note.md | 126 +++++++ _notes/안녕하세요.md | 6 + _pages/about.md | 9 + _pages/index.md | 22 ++ _pages/search.md | 23 ++ _plugins/bidirectional_links_generator.rb | 111 ++++++ _plugins/embed_tweets.rb | 22 ++ _plugins/empty_front_matter_note_injector.rb | 18 + _plugins/markdown-highlighter.rb | 18 + _plugins/open_external_links_in_new_tab.rb | 28 ++ _sass/_code.scss | 76 +++++ _sass/_normalize.scss | 338 +++++++++++++++++++ _sass/_style.scss | 162 +++++++++ assets/image.jpg | Bin 0 -> 655958 bytes assets/jazzyfrenchy.mp3 | Bin 0 -> 1467245 bytes netlify.toml | 3 + search.json | 16 + styles.scss | 6 + 41 files changed, 1830 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/something-else.md create mode 100644 .gitignore create mode 100644 404.html create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 LICENSE create mode 100644 README.md create mode 100644 _config.yml create mode 100644 _includes/footer.html create mode 100644 _includes/head.html create mode 100644 _includes/link-previews.html create mode 100644 _includes/nav.html create mode 100644 _includes/notes_graph.html create mode 100644 _layouts/default.html create mode 100644 _layouts/note.html create mode 100644 _layouts/page.html create mode 100644 _notes/accents.md create mode 100644 _notes/animals/cats.md create mode 100644 _notes/animals/tigers.md create mode 100644 _notes/consistency.md create mode 100755 _notes/move your body every day.md create mode 100644 _notes/your-first-note.md create mode 100644 _notes/안녕하세요.md create mode 100644 _pages/about.md create mode 100644 _pages/index.md create mode 100644 _pages/search.md create mode 100644 _plugins/bidirectional_links_generator.rb create mode 100644 _plugins/embed_tweets.rb create mode 100644 _plugins/empty_front_matter_note_injector.rb create mode 100644 _plugins/markdown-highlighter.rb create mode 100644 _plugins/open_external_links_in_new_tab.rb create mode 100644 _sass/_code.scss create mode 100644 _sass/_normalize.scss create mode 100644 _sass/_style.scss create mode 100644 assets/image.jpg create mode 100644 assets/jazzyfrenchy.mp3 create mode 100644 netlify.toml create mode 100644 search.json create mode 100644 styles.scss diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..2853cf2 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: maximevaillancourt diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..c82886f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,30 @@ +--- +name: Bug report +about: Something's broken with the template +title: '' +labels: bug +assignees: '' + +--- + + + +**Describe the bug** +A clear and concise description of what the bug is. + +**To reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - Operating system: [e.g. macOS 11.4] + - Ruby version: [e.g. Ruby 2.7.1] diff --git a/.github/ISSUE_TEMPLATE/something-else.md b/.github/ISSUE_TEMPLATE/something-else.md new file mode 100644 index 0000000..c3abf7f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/something-else.md @@ -0,0 +1,10 @@ +--- +name: Something else +about: Something's wrong, but it's not a bug with the template +title: '' +labels: '' +assignees: '' + +--- + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d485b77 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Generated website directory +_site/ + +# Sass cache +.sass-cache/ + +# Jekyll cache & metadata +.jekyll-cache/ +.jekyll-metadata + +# Notes graph metadata +_includes/notes_graph.json + +# Obsidian config +.obsidian/ diff --git a/404.html b/404.html new file mode 100644 index 0000000..6343fd7 --- /dev/null +++ b/404.html @@ -0,0 +1,11 @@ +--- +permalink: 404.html +layout: default +title: "404" +id: "not-found" +--- + +
Looks like this page doesn't exist. Return home to get a fresh start.
+This line appears after every note.
++ There are no notes linking to this note. +
+Here are all the notes in this garden, along with their links, visualized as a graph.
+ +{% include notes_graph.html %} diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 0000000..c8c70f5 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,7 @@ +--- +layout: default +--- + ++ Take a look at [[Your first note]] to get started on your exploration. +
+ +This digital garden template is free, open-source, and [available on GitHub here](https://github.com/maximevaillancourt/digital-garden-jekyll-template). + +The easiest way to get started is to read this [step-by-step guide explaining how to set this up from scratch](https://maximevaillancourt.com/blog/setting-up-your-own-digital-garden-with-jekyll). + + diff --git a/_pages/search.md b/_pages/search.md new file mode 100644 index 0000000..d93b92b --- /dev/null +++ b/_pages/search.md @@ -0,0 +1,23 @@ +--- +layout: page +title: Search +permalink: /search +--- + + + + + + + + \ No newline at end of file diff --git a/_plugins/bidirectional_links_generator.rb b/_plugins/bidirectional_links_generator.rb new file mode 100644 index 0000000..918c662 --- /dev/null +++ b/_plugins/bidirectional_links_generator.rb @@ -0,0 +1,111 @@ +# frozen_string_literal: true +class BidirectionalLinksGenerator < Jekyll::Generator + def generate(site) + graph_nodes = [] + graph_edges = [] + + all_notes = site.collections['notes'].docs + all_pages = site.pages + + all_docs = all_notes + all_pages + + link_extension = !!site.config["use_html_extension"] ? '.html' : '' + + # Convert all Wiki/Roam-style double-bracket link syntax to plain HTML + # anchor tag elements () with "internal-link" CSS class + all_docs.each do |current_note| + all_docs.each do |note_potentially_linked_to| + note_title_regexp_pattern = Regexp.escape( + File.basename( + note_potentially_linked_to.basename, + File.extname(note_potentially_linked_to.basename) + ) + ).gsub('\_', '[ _]').gsub('\-', '[ -]').capitalize + + title_from_data = note_potentially_linked_to.data['title'] + if title_from_data + title_from_data = Regexp.escape(title_from_data) + end + + new_href = "#{site.baseurl}#{note_potentially_linked_to.url}#{link_extension}" + anchor_tag = "\\1" + + # Replace double-bracketed links with label using note title + # [[A note about cats|this is a link to the note about cats]] + current_note.content.gsub!( + /\[\[#{note_title_regexp_pattern}\|(.+?)(?=\])\]\]/i, + anchor_tag + ) + + # Replace double-bracketed links with label using note filename + # [[cats|this is a link to the note about cats]] + current_note.content.gsub!( + /\[\[#{title_from_data}\|(.+?)(?=\])\]\]/i, + anchor_tag + ) + + # Replace double-bracketed links using note title + # [[a note about cats]] + current_note.content.gsub!( + /\[\[(#{title_from_data})\]\]/i, + anchor_tag + ) + + # Replace double-bracketed links using note filename + # [[cats]] + current_note.content.gsub!( + /\[\[(#{note_title_regexp_pattern})\]\]/i, + anchor_tag + ) + end + + # At this point, all remaining double-bracket-wrapped words are + # pointing to non-existing pages, so let's turn them into disabled + # links by greying them out and changing the cursor + current_note.content = current_note.content.gsub( + /\[\[([^\]]+)\]\]/i, # match on the remaining double-bracket links + <<~HTML.delete("\n") # replace with this HTML (\\1 is what was inside the brackets) + + [[ + \\1 + ]] + HTML + ) + end + + # Identify note backlinks and add them to each note + all_notes.each do |current_note| + # Nodes: Jekyll + notes_linking_to_current_note = all_notes.filter do |e| + e.content.include?(current_note.url) + end + + # Nodes: Graph + graph_nodes << { + id: note_id_from_note(current_note), + path: "#{site.baseurl}#{current_note.url}#{link_extension}", + label: current_note.data['title'], + } unless current_note.path.include?('_notes/index.html') + + # Edges: Jekyll + current_note.data['backlinks'] = notes_linking_to_current_note + + # Edges: Graph + notes_linking_to_current_note.each do |n| + graph_edges << { + source: note_id_from_note(n), + target: note_id_from_note(current_note), + } + end + end + + File.write('_includes/notes_graph.json', JSON.dump({ + edges: graph_edges, + nodes: graph_nodes, + })) + end + + def note_id_from_note(note) + note.data['title'].bytes.join + end +end diff --git a/_plugins/embed_tweets.rb b/_plugins/embed_tweets.rb new file mode 100644 index 0000000..19c1b33 --- /dev/null +++ b/_plugins/embed_tweets.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +class TweetEmbedGenerator < Jekyll::Generator + def generate(site) + return if !site.config["embed_tweets"] + + all_notes = site.collections['notes'].docs + all_pages = site.pages + all_docs = all_notes + all_pages + + all_docs.each do |current_note| + current_note.content.gsub!( + /^https?:\/\/twitter\.com\/(?:#!\/)?(\w+)\/status(es)?\/(\d+)$/i, + <<~HTML ++ This tweet could not be embedded. View it on Twitter instead. ++ + HTML + ) + end + end +end diff --git a/_plugins/empty_front_matter_note_injector.rb b/_plugins/empty_front_matter_note_injector.rb new file mode 100644 index 0000000..83fd4b2 --- /dev/null +++ b/_plugins/empty_front_matter_note_injector.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +EMPTY_FRONT_MATTER = <<~JEKYLL + --- + --- + +JEKYLL + +# Inject empty front matter in notes that don't have any +Jekyll::Hooks.register :site, :after_init do |site| + Dir.glob(site.collections['notes'].relative_directory + '/**/*.md').each do |filename| + raw_note_content = File.read(filename) + unless raw_note_content.start_with?('---') + raw_note_content.prepend(EMPTY_FRONT_MATTER) + File.write(filename, raw_note_content) + end + end +end diff --git a/_plugins/markdown-highlighter.rb b/_plugins/markdown-highlighter.rb new file mode 100644 index 0000000..b14ae84 --- /dev/null +++ b/_plugins/markdown-highlighter.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# Turns ==something== in Markdown to something in output HTML + +Jekyll::Hooks.register [:notes], :post_convert do |doc| + replace(doc) +end + +Jekyll::Hooks.register [:pages], :post_convert do |doc| + # jekyll considers anything at the root as a page, + # we only want to consider actual pages + next unless doc.path.start_with?('_pages/') + replace(doc) +end + +def replace(doc) + doc.content.gsub!(/==+([^ ](.*?)?[^ .=]?)==+/, "\\1") +end diff --git a/_plugins/open_external_links_in_new_tab.rb b/_plugins/open_external_links_in_new_tab.rb new file mode 100644 index 0000000..e0496a2 --- /dev/null +++ b/_plugins/open_external_links_in_new_tab.rb @@ -0,0 +1,28 @@ +# If the configuration sets `open_external_links_in_new_tab` to a truthy value, +# add 'target=_blank' to anchor tags that don't have `internal-link` class + +# frozen_string_literal: true +require 'nokogiri' + +Jekyll::Hooks.register [:notes], :post_convert do |doc| + convert_links(doc) +end + +Jekyll::Hooks.register [:pages], :post_convert do |doc| + # jekyll considers anything at the root as a page, + # we only want to consider actual pages + next unless doc.path.start_with?('_pages/') + convert_links(doc) +end + +def convert_links(doc) + open_external_links_in_new_tab = !!doc.site.config["open_external_links_in_new_tab"] + + if open_external_links_in_new_tab + parsed_doc = Nokogiri::HTML(doc.content) + parsed_doc.css("a:not(.internal-link):not(.footnote):not(.reversefootnote)").each do |link| + link.set_attribute('target', '_blank') + end + doc.content = parsed_doc.inner_html + end +end diff --git a/_sass/_code.scss b/_sass/_code.scss new file mode 100644 index 0000000..c7a18d8 --- /dev/null +++ b/_sass/_code.scss @@ -0,0 +1,76 @@ +.highlight { + background: #f8f8f8; + padding: 1px 1em; + border-radius: 3px; + font-size: 1em; + font-size: 0.9em; + overflow: auto; + margin: 1em -1em; + code{ + padding: 0; + } +} + +div.highlight { + display: grid; +} + +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { font-weight: bold } /* Keyword */ +.highlight .o { font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { font-weight: bold } /* Keyword.Constant */ +.highlight .kd { font-weight: bold } /* Keyword.Declaration */ +.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d14 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d14 } /* Literal.String.Backtick */ +.highlight .sc { color: #d14 } /* Literal.String.Char */ +.highlight .sd { color: #d14 } /* Literal.String.Doc */ +.highlight .s2 { color: #d14 } /* Literal.String.Double */ +.highlight .se { color: #d14 } /* Literal.String.Escape */ +.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ +.highlight .si { color: #d14 } /* Literal.String.Interpol */ +.highlight .sx { color: #d14 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d14 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ diff --git a/_sass/_normalize.scss b/_sass/_normalize.scss new file mode 100644 index 0000000..3a07a44 --- /dev/null +++ b/_sass/_normalize.scss @@ -0,0 +1,338 @@ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/_sass/_style.scss b/_sass/_style.scss new file mode 100644 index 0000000..8381528 --- /dev/null +++ b/_sass/_style.scss @@ -0,0 +1,162 @@ +$color-primary: hsl(0, 0%, 10%); +$color-text: hsl(0, 0%, 20%); +$color-subtext: hsl(0, 0%, 30%); +$color-border: hsl(0, 0%, 85%); +$color-box-background: mix($color-primary, white, 4%); +$border-radius: 4px; +$font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, + sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; + +body { + box-sizing: content-box; + font-family: $font-family; + margin: 0 auto; + line-height: 1.7; + padding: 4vh 6vw; + overflow-x: hidden; + color: $color-text; + font-size: 1rem; + max-width: 63em; + + @media (min-width: 820px) { + font-size: 1.2rem; + } +} + +time { + display: block; + color: $color-subtext; + margin: 0.5em 0 1em; +} + +footer { + margin: 2em 0; + font-size: 0.8em; + color: mix($color-text, white, 80%); + padding-top: 1em; +} + +img { + max-width: 100%; + display: block; + margin: 0 auto; + max-height: 75vh; + border-radius: $border-radius; +} + +blockquote { + padding: 1.5em; + margin: 0; + font-size: 0.88em; + background: $color-box-background; + border-radius: $border-radius; + + p { + margin: 0; + } +} + +hr { + width: 100%; + border: 0; + height: 1px; + margin: 1.5em 0; + background: $color-border; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.3; + margin-bottom: 0; + padding-bottom: 0; +} + +a { + transition: background 300ms; + padding: 0 0.1em; + text-decoration: none; + border-bottom: 1px solid $color-border; + color: $color-primary; + &:hover { + color: black !important; + background: #fffaf1; + } + &:after { + position: relative; + top: -0.5em; + font-size: 0.7em; + content: "↗"; + color: #aaaaaa; + } + &.internal-link:after, + &.footnote:after, + &.reversefootnote:after { + content: ""; + } +} + +*:focus { + background: #ffe8bc !important; + color: black !important; +} + +nav { + margin: 1em 0 3em; +} + +#notes-entry-container { + display: grid; + grid-gap: 2em; + grid-template-areas: + "content" + "side"; + + @media (min-width: 700px) { + grid-template-columns: 3fr 1fr; + grid-template-areas: "content side"; + } +} + +.backlink-box, .search-result-box { + background: $color-box-background; + padding: 1em; + border-radius: $border-radius; +} + +.search-result-box { + margin-bottom: 1em; +} + +#search-input { + width: 100%; + background: $color-box-background; + border: 0px; + border-radius: 4px; + padding: 0.5em; +} + +#search-input:focus { + background: $color-primary; +} + +code { + background: #f5f5f5; + padding: 0.1em 0.2em; + border-radius: 4px; +} + +.invalid-link { + color: #444444; + cursor: help; + background: #fafafa; + padding: 0 0.1em; +} + +.invalid-link-brackets { + color: #ccc; + cursor: help; +} diff --git a/assets/image.jpg b/assets/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89718cce45877e17838f97576c8db7028e515fce GIT binary patch literal 655958 zcmb@tcUTkA(=Q$iqEwM8MMau)0SPFAih@e70TOzLgih#1x`J4!0s_(@l>iAH1f&;{ zl7vu|DoH@PfavA>zW4XM_mAIy_s-d~``MW}vwLRudCu;fIseH2766xZw4ZAO&YU>| zcy?L<|9+gk^ZfB+J0lZA?dN)0rvd=rtf+&pFYG)30Pyk-^f!5`dBf5Qe1q{jfbq1j z0(by79Gn7t9~l|xovHx-zvF-K|Ij`WaB2wv7?=HztpWbbSh48K`l>mcli$|4WB*6* z{}(Yiy979$O8%Ty7bjo;Kmg#3^C=by4)pyGetC+y{7-M{6o32=cKdH!{U7Z3-}uXa z>6n>3KGh+g;u}ux4yQKG{657pj{gVW?f=04`?{wp0Olti0lqMY&>Kcd|2h4COMxyS zr~Lo`9{c!)`g^#!2i|ye>Lr&O&%K@GWNs+lR!{)|{^RrizUq$gfBEtZ&(Qzy;^qMW z_4a@N{x$y(Pp2IKz@4^aYWyGGEmZ)3gBbwmYxH&Scla-R=T7%$U0nfy?Fs;Z)d~RM z96fCV32;?X{4e<#7EJ(vVea3*9dQ7FF&zLndH3(%aq+)@CnW&DxfuZ9v-iJgKs?~= zxpU{vpF7XMaQ?!7=;B32#)}tOFEO1KR!$Z+meY-sgNuXxv|i)m=H|O5A|xmzA|)m! zrL3r|rDc8Q|JK02P5{S61}?^eb7yV>&T^bN$8qN07r?dC-km*r?msW`|E6>2&oZ33 z0ARd$iRm8&aPhw-hdx+2zNK$muRdfTxd7K7_btu^tP1x#G+em~bgMslK-4Ip*u0VQ zddT}rlvEgHX%O+cSo=rb^U=(~k8SDWaw0nt{UkPr34YcIM;0b`|P|EImj_GwmRI z(KN5%ZFTH;JxGSHe2S~Qh71Y07Ic_5R10y6U;(jC^V^d-xx2_3$Kh8>R_yY9JghKh z*6&&xP)1ey2$?UDd#&PIZ>o=>MSF?)MQg3*#7H+%)1>ubT*Zq5y%^)$R_9HJoIQL? z-#Y=tT-MmZVWxEpdOa|^iVup0tY zgm)|GfGY@n&Q^2W+a^^c%vf2OeqiqZqpRikr7lgc
toH^bK>4NO}CduK}Yr_ KxP+3j$WLKk^1k);7@AC{%1_E4sGa(7AC6EA8O@10qqoa UY^F<9sdB-9eUbA*=$^tu%E2AjGHQa2u~S?*;{Kd DaN+OvLSd+5E
zgAxTEvZl>e!9N%H*(fxY1BL8Hzj%G7vV;{25Cb?nM9!V$`t}>8yR&i;gn+Y~BH&iQ
zmRww*ktS(#LHTSOS0_l_y4JNS>_e@E<+gIu^;&{kf+RIMvFr@z-g>ika$lxV)%vNs_~zq
zGVf|}jm`|?JEbv8g$VVW@={6{>slaG0$*?30?NF*-?48GU)k-+xCvi%u2rXgmsh>@
zEGHwxXb8lq(0hTOiSvez6YdVuF^(L7Hc&<+H&Z
zUzE`tcw}~bhMPWqkToVk#6^)eMgfm44COd13*uoUzAHZn6k}ZM%;~K$EB$y?7!1s!
z&wxoj!O$IQi53HUH!?}99+x=%MWO*t9Ev42ec!jC#G|
mi2|_aikMrYz5O8hqWyRSez--k+#fjBYFF*=g?xXs3nj=|e
zP7UniVbP3T*;DjT-x8-{utjvMH@NXXf0Rqj;{)E_ioBa
zm-CeERZ6?!ruoWd75uS5$pee#x_@dc^H}B3c3pG{0@yoxlw0LE6SHnX;q*0l##7%>
zoM~`KJD>C-lI+UmDOYl>_t3&Oyd^H~^23|8!B5Q8e^QE(S;g@I$ie8<&-^#mq49Db
zO#CkmFkB>MSBsbAu4V`EsA?&nzS<2+)c?vCzMfE3V4y(D|FIBBCf;?|=n$XzYV(7?
zi~T}G%nn6{42DHsgcN6SdADQm5>H2CHQ#-f^~K`yo_6}S(l>n%X^sKaZ9v;}O*Ut$
zuYgaNNR~0#(;MXrfE!wr(g689?#;3DkX!!sR|0t>86b@8qqi$g`_RqXs8G=_^HC)1
z{$)QU_G_Ilt%3ZFnQG-ao2ab)Ar5`