DevSculptor 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +711 -0
  4. data/_config.yml +142 -0
  5. data/_data/blogroll.yml +34 -0
  6. data/_data/locales.yml +280 -0
  7. data/_data/page-list.yml +28 -0
  8. data/_data/projects.yml +50 -0
  9. data/_data/social.yml +149 -0
  10. data/_includes/about.html +19 -0
  11. data/_includes/anchor_headings.html +174 -0
  12. data/_includes/archives.html +28 -0
  13. data/_includes/categories.html +21 -0
  14. data/_includes/comments.html +35 -0
  15. data/_includes/footer/code-block-lang.html +12 -0
  16. data/_includes/footer/color_theme_toggler.html +92 -0
  17. data/_includes/footer/copyright.html +14 -0
  18. data/_includes/footer/create-toc.html +51 -0
  19. data/_includes/footer/page_pagination.html +24 -0
  20. data/_includes/footer/reading-time.html +11 -0
  21. data/_includes/footer/scripts.html +10 -0
  22. data/_includes/footer/toggle-toc.html +12 -0
  23. data/_includes/footer.html +50 -0
  24. data/_includes/head/ban.html +7 -0
  25. data/_includes/head/google_analytics.html +9 -0
  26. data/_includes/head/icons.html +5 -0
  27. data/_includes/head/scripts.html +6 -0
  28. data/_includes/head/stylesheets.html +2 -0
  29. data/_includes/head.html +20 -0
  30. data/_includes/home/post_card.html +56 -0
  31. data/_includes/home.html +28 -0
  32. data/_includes/navigation/color-theme-switcher.html +50 -0
  33. data/_includes/navigation/svg.html +20 -0
  34. data/_includes/navigation.html +48 -0
  35. data/_includes/page_pagination.html +29 -0
  36. data/_includes/projects/project-card.html +73 -0
  37. data/_includes/projects.html +8 -0
  38. data/_includes/search/algolia.html +165 -0
  39. data/_includes/sidebar/aboutme.html +61 -0
  40. data/_includes/sidebar/blogroll.html +7 -0
  41. data/_includes/sidebar.html +6 -0
  42. data/_includes/tags.html +21 -0
  43. data/_includes/toc.html +7 -0
  44. data/_layouts/default.html +21 -0
  45. data/_layouts/home.html +2 -0
  46. data/_layouts/page.html +11 -0
  47. data/_layouts/plain.html +14 -0
  48. data/_layouts/post.html +78 -0
  49. data/_sass/_base.scss +250 -0
  50. data/_sass/_navigation.scss +24 -0
  51. data/_sass/_syntax-highlighting.scss +160 -0
  52. data/assets/JustinSunday_Resume_2023-09-14.pdf +0 -0
  53. data/assets/branding/branding-colors-and-fonts/BrandBoard.pdf +0 -0
  54. data/assets/branding/branding-colors-and-fonts/fonts/Fira Mono Bold.ttf +0 -0
  55. data/assets/branding/logo/eps-pdf-png-formats.zip +0 -0
  56. data/assets/branding/logo/svg/logo-black.svg +1 -0
  57. data/assets/branding/logo/svg/logo-color.svg +1 -0
  58. data/assets/branding/logo/svg/logo-no-background-black-letters.svg +1 -0
  59. data/assets/branding/logo/svg/logo-no-background.svg +1 -0
  60. data/assets/branding/logo/svg/logo-white.svg +1 -0
  61. data/assets/fonts/CascadiaCode-WebFont/caskaydia_cove_nerd_font_complete-demo.html +517 -0
  62. data/assets/fonts/CascadiaCode-WebFont/caskaydia_cove_nerd_font_complete-webfont.woff +0 -0
  63. data/assets/fonts/CascadiaCode-WebFont/caskaydia_cove_nerd_font_complete-webfont.woff2 +0 -0
  64. data/assets/fonts/CascadiaCode-WebFont/generator_config.txt +5 -0
  65. data/assets/fonts/CascadiaCode-WebFont/specimen_files/grid_12-825-55-15.css +129 -0
  66. data/assets/fonts/CascadiaCode-WebFont/specimen_files/specimen_stylesheet.css +396 -0
  67. data/assets/fonts/CascadiaCode-WebFont/stylesheet.css +12 -0
  68. data/assets/images/projects/desvsculptor/20230926-localhost-iphone14promax-homepage-fotor-bg-remover-20231002163813.png +0 -0
  69. data/assets/images/projects/desvsculptor/20230926-localhost-iphone14promax-homepage.PNG +0 -0
  70. data/assets/images/projects/desvsculptor/home-page-example.png +0 -0
  71. data/assets/images/projects/dummy_project/ilya-pavlov-OqtafYT5kTw-unsplash.jpg +0 -0
  72. data/assets/images/site-shots/blogroll-20231010.png +0 -0
  73. data/assets/images/site-shots/blogroll-to-datayml-20201010.png +0 -0
  74. data/assets/images/topbutton.png +0 -0
  75. data/assets/js/jquery-1.9.1.min.js +5 -0
  76. data/assets/js/totop.js +26 -0
  77. data/assets/scss/main.scss +120 -0
  78. data/pages/about.md +8 -0
  79. data/pages/archives.md +7 -0
  80. data/pages/categories.md +8 -0
  81. data/pages/home.md +6 -0
  82. data/pages/projects.md +8 -0
  83. data/pages/search.md +11 -0
  84. data/pages/subscribe.md +12 -0
  85. data/pages/tags.md +7 -0
  86. metadata +241 -0
@@ -0,0 +1,56 @@
1
+ {%- assign post = include.post -%}
2
+ <div class="card">
3
+
4
+ {%- if post.featured -%}
5
+ <div class="card-header">
6
+ Featured
7
+ </div>
8
+ {%- endif -%}
9
+
10
+ <div class="card-body">
11
+ <h3 itemprop="name" class="card-title">
12
+ <a itemprop="url" class="post-link" href="{{ post.url | prepend: site.url }}">
13
+ {{ post.title }}
14
+ </a>
15
+ </h3>
16
+ <hr>
17
+ <meta itemprop="keywords" content="{{ post.tags | join: ',' }}"/>
18
+ <h6 class="card-subtitle mb-2 text-body-secondary">
19
+ <span class="post-meta"><i class="bi bi-archive"
20
+ title="{{ locales[site.default_locale].Categories }}"></i></span>
21
+ {%- for cat in post.categories -%}
22
+ <a href="{{ site.baseurl }}/categories/#{{ cat }}"
23
+ title="{{ cat }}">{{ cat }}</a>{%- unless post.categories.last == cat -%}, {%- endunless -%}
24
+ {%- endfor -%}
25
+ {%- if post.tags != empty -%}
26
+ <span class="post-meta"><i class="bi bi-tags" title="{{ locales[site.default_locale].Tags }}"></i></span>
27
+ {%- for tag in post.tags -%}
28
+ <a href="{{ site.baseurl }}/tags/#{{ tag }}"
29
+ title="{{ tag }}">{{ tag }}</a>{%- unless post.tags.last == tag -%}, {%- endunless -%}
30
+ {%- endfor -%}
31
+ {%- endif -%}
32
+ <time itemprop="datePublished" datetime="{{ post.date | date: '%Y-%m-%d' }}">
33
+ <span class="post-meta"><i class="bi bi-calendar-event"
34
+ title="{{ locales[site.default_locale].PostDate }}"></i></span>{{ post.date | date: "%b %-d, %Y" }}
35
+ </time>
36
+ {%- if post.last_modified_at -%}
37
+ <time itemprop="dateModified" datetime="{{ post.last_modified_at }}">
38
+ <span class="post-meta">
39
+ <i class="bi bi-pencil-square" title="{{ locales[site.default_locale].EditDate }}"></i>
40
+ </span> {{ post.last_modified_at | date: "%b %-d, %Y" }}
41
+ </time>
42
+ {%- endif -%}
43
+ </h6>
44
+ <article itemprop="articleBody">
45
+ {%- if post.summary -%}
46
+ <p class="card-text">{{ post.summary }}</p>
47
+ <div style="text-align: right"><a href="{{ post.url | prepend: site.url }}">Read more</a></div>
48
+ {%- elsif post.content contains site.excerpt_separator -%}
49
+ <p class="card-text">{{ post.summary }}</p>
50
+ <div style="text-align: right"><a href="{{ post.url | prepend: site.url }}">Read more</a></div>
51
+ {%- else -%}
52
+ <p class="card-text">{{ post.content }}</p>
53
+ {%- endif -%}
54
+ </article>
55
+ </div>
56
+ </div>
@@ -0,0 +1,28 @@
1
+ <div class="home row">
2
+ <div class="post col-md-8 mx-auto" itemscope itemtype="https://schema.org/BlogPosting">
3
+
4
+ {%- assign locales = site.data.locales -%}
5
+ {%- assign featuredPosts = paginator.posts | where: "featured", true -%}
6
+ {% if featuredPosts %}
7
+ {%- assign featuredPosts = featuredPosts | sort: "order" -%}
8
+ {% endif %}
9
+ {%- assign otherPosts = paginator.posts | where: "featured", false -%}
10
+
11
+ {%- for fPost in featuredPosts -%}
12
+ {%- include home/post_card.html post=fPost -%}
13
+ {%- endfor -%}
14
+
15
+ <hr>
16
+
17
+ {%- for oPost in otherPosts -%}
18
+ {%- include home/post_card.html post=oPost -%}
19
+ <br>
20
+ {%- endfor -%}
21
+
22
+ </div>
23
+ <div class="vr d-none d-md-block" style="padding: 0;"></div>
24
+ <hr class="d-block d-md-none">
25
+ <div class="col-md-3 mx-auto">
26
+ {% include sidebar.html %}
27
+ </div>
28
+ </div>
@@ -0,0 +1,50 @@
1
+ <div class="nav-item dropdown mx-auto">
2
+ <button
3
+ class="btn btn-link nav-link py-2 px-0 px-lg-2 dropdown-toggle d-flex align-items-center"
4
+ id="bd-theme"
5
+ type="button"
6
+ aria-expanded="false"
7
+ data-bs-toggle="dropdown"
8
+ data-bs-display="static"
9
+ aria-label="Toggle Theme (dark)"
10
+ title="Toggle Theme"
11
+ >
12
+ <svg class="bi my-1 theme-icon-active">
13
+ <use href="#moon-stars-fill"></use>
14
+ </svg>
15
+ <span class="d-lg-none ms-2" id="bd-theme-text">Toggle theme</span>
16
+ </button>
17
+ <ul
18
+ class="dropdown-menu dropdown-menu-end"
19
+ aria-labelledby="bd-theme-text"
20
+ >
21
+ <li>
22
+ <button
23
+ type="button"
24
+ class="dropdown-item d-flex align-items-center"
25
+ data-bs-theme-value="light"
26
+ aria-pressed="false"
27
+ >
28
+ <svg class="bi me-2 opacity-50 theme-icon">
29
+ <use href="#sun-fill"></use>
30
+ </svg>
31
+ Light
32
+ <svg class="bi ms-auto d-none"><use href="#check2"></use></svg>
33
+ </button>
34
+ </li>
35
+ <li>
36
+ <button
37
+ type="button"
38
+ class="dropdown-item d-flex align-items-center active"
39
+ data-bs-theme-value="dark"
40
+ aria-pressed="true"
41
+ >
42
+ <svg class="bi me-2 opacity-50 theme-icon">
43
+ <use href="#moon-stars-fill"></use>
44
+ </svg>
45
+ Dark
46
+ <svg class="bi ms-auto d-none"><use href="#check2"></use></svg>
47
+ </button>
48
+ </li>
49
+ </ul>
50
+ </div>
@@ -0,0 +1,20 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" style="display: none">
2
+ <symbol id="check2" viewBox="0 0 16 16">
3
+ <path
4
+ d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"
5
+ />
6
+ </symbol>
7
+ <symbol id="moon-stars-fill" viewBox="0 0 16 16">
8
+ <path
9
+ d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z"
10
+ />
11
+ <path
12
+ d="M10.794 3.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387a1.734 1.734 0 0 0-1.097 1.097l-.387 1.162a.217.217 0 0 1-.412 0l-.387-1.162A1.734 1.734 0 0 0 9.31 6.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387a1.734 1.734 0 0 0 1.097-1.097l.387-1.162zM13.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732l-.774-.258a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L13.863.1z"
13
+ />
14
+ </symbol>
15
+ <symbol id="sun-fill" viewBox="0 0 16 16">
16
+ <path
17
+ d="M8 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z"
18
+ />
19
+ </symbol>
20
+ </svg>
@@ -0,0 +1,48 @@
1
+ {%- include navigation/svg.html -%}
2
+ {%- assign siteLogoLight = site.logo_light | prepend: site.url -%}
3
+ {%- assign siteLogoDark = site.logo_dark | prepend: site.url -%}
4
+
5
+ <nav id="navbar" class="navbar navbar-expand-lg bg-body">
6
+ <div class="container">
7
+ <a class="navbar-brand" href="#">
8
+ <img
9
+ id="site-logo"
10
+ src="{{ site.logo_light | prepend: site.url }}"
11
+ alt="DevSculptor"
12
+ width="200"
13
+ />
14
+ </a>
15
+ <button
16
+ class="navbar-toggler"
17
+ type="button"
18
+ data-bs-toggle="collapse"
19
+ data-bs-target="#navbarToggler"
20
+ aria-controls="navbarToggler"
21
+ aria-expanded="false"
22
+ aria-label="Toggle navigation"
23
+ >
24
+ <span class="navbar-toggler-icon"></span>
25
+ </button>
26
+ <div class="nav collapse navbar-collapse justify-content-center" id="navbarToggler">
27
+ <ul class="navbar-nav">
28
+ {%- for page in site.data.page-list.pages -%}
29
+ {%- if page.title != "" && page.url != "" -%}
30
+ <li class="nav-item">
31
+ <a
32
+ class="nav-link link-body-emphasis"
33
+ aria-current="page"
34
+ href="{{ page.url | prepend: site.url }}"
35
+ {%- if page.new-tab == true -%}
36
+ target="_blank" rel="noopener noreferrer"
37
+ {%- endif -%}
38
+ >
39
+ {{ page.title | replace: page.title, site.data.locales[site.default_locale].[page.title] }}
40
+ </a>
41
+ </li>
42
+ {%- endif -%}
43
+ {%- endfor -%}
44
+ </ul>
45
+ </div>
46
+ {%- include navigation/color-theme-switcher.html -%}
47
+ </div>
48
+ </nav>
@@ -0,0 +1,29 @@
1
+ <section class="pager">
2
+ <ul>
3
+ {%- if page.previous -%}
4
+ <li class="previous">
5
+ <a
6
+ href="{{ site.baseurl }}{{ page.previous.url }}"
7
+ title="{{ page.previous.title }}"
8
+ >&larr; {{ site.data.locales[site.default_locale].Previous }}</a
9
+ >
10
+ </li>
11
+ {%- else -%}
12
+ <li class="disabled">
13
+ <a>&larr; {{ site.data.locales[site.default_locale].Previous }}</a>
14
+ </li>
15
+ {%- endif -%} {%- if page.next -%}
16
+ <li class="next">
17
+ <a
18
+ href="{{ site.baseurl }}{{ page.next.url }}"
19
+ title="{{ page.next.title }}"
20
+ >{{ site.data.locales[site.default_locale].Next }} &rarr;</a
21
+ >
22
+ </li>
23
+ {%- else -%}
24
+ <li class="disabled">
25
+ <a>{{ site.data.locales[site.default_locale].Next }} &rarr;</a>
26
+ </li>
27
+ {%- endif -%}
28
+ </ul>
29
+ </section>
@@ -0,0 +1,73 @@
1
+ <div id="project-{{ proj.name }}" class="card h-100 d-block">
2
+ <div class="card-body">
3
+ <h2 class="card-title">{{ proj.name }}</h2>
4
+ <div class="card-text">
5
+ {%- if proj.start-year and proj.start-year != "" -%}
6
+ <p><b>Project Started</b>: {{ proj.start-year }}</p>
7
+ {%- endif -%}
8
+ {%- if proj.end-year and proj.end-year != "" and proj.ongoing == false -%}
9
+ <p><b>Project Ended</b>: {{ proj.end-year }}</p>
10
+ {%- endif -%}
11
+ {%- if proj.ongoing and proj.ongoing == true -%}
12
+ <p><b>Project Ended</b>: Ongoing</p>
13
+ {%- endif -%}
14
+ {%- if proj.website != "" -%}
15
+ <p>
16
+ <b>Project Website</b>:
17
+ <a
18
+ href="{{ proj.website }}"
19
+ target="_blank"
20
+ rel="noopener noreferrer"
21
+ title="{{ proj.website }}"
22
+ >
23
+ {{ proj.website }}
24
+ </a>
25
+ </p>
26
+ {%- endif -%}
27
+ {%- if proj.client and proj.client.name != '' -%}
28
+ <p>
29
+ <b>Client</b>:
30
+ {%- if proj.client.website != '' -%}
31
+ <a
32
+ href="{{ proj.client.website }}"
33
+ target="_blank"
34
+ rel="noopener noreferrer"
35
+ title="{{ proj.client.website }}"
36
+ >
37
+ {{ proj.client.name }}
38
+ </a>
39
+ {%- else -%}
40
+ {{ proj.client.name }}
41
+ {%- endif -%}
42
+ </p>
43
+ {%- endif -%}
44
+ {% if proj.tags %}
45
+ <p>
46
+ <b>Tags</b>: {{ proj.tags | array_to_sentence_string }}
47
+ </p>
48
+ {% endif %}
49
+ {% if proj.skills %}
50
+ <p><b>Skills</b>: {{ proj.skills | array_to_sentence_string }}</p>
51
+ {% endif %}
52
+ {% if proj.description %}
53
+ <p>
54
+ <b>Description</b>: <br>
55
+ </p>
56
+ <p>{{ proj.description }}</p>
57
+ {% endif %}
58
+ <p><b>Project Images</b>:<br></p>
59
+ <div class="container row">
60
+ {%- for image in proj.images -%}
61
+ <div class="col-sm-12 col-md-6">
62
+ <figure>
63
+ <img alt="{{ image.title }}" src="{{ image.path | prepend: site.url }}" loading="lazy" title="{{ image.title }}">
64
+ <figcaption>
65
+ {{ image.caption }}
66
+ </figcaption>
67
+ </figure>
68
+ </div>
69
+ {%- endfor -%}
70
+ </div>
71
+ </div>
72
+ </div>
73
+ </div>
@@ -0,0 +1,8 @@
1
+ {%- assign projects = site.data.projects | where_exp: "item", "item.display == true" -%}
2
+ {%- for proj in projects -%}
3
+ <div class="row gy-5">
4
+ <div class="col-sm-12">
5
+ {%- include projects/project-card.html -%}
6
+ </div>
7
+ </div>
8
+ {%- endfor -%}
@@ -0,0 +1,165 @@
1
+ <script src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.6.0/dist/instantsearch.min.js"></script>
2
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
3
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.6.0/dist/instantsearch.min.css">
4
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.6.0/dist/instantsearch-theme-algolia.min.css">
5
+
6
+ <script>
7
+ const search = instantsearch({
8
+ appId: '{{ site.algolia.application_id }}',
9
+ apiKey: '{{ site.algolia.search_only_api_key }}',
10
+ indexName: '{{ site.algolia.index_name }}'
11
+ });
12
+
13
+ function checkForContent(hit) {
14
+ let content = '';
15
+ let chipContent = '';
16
+ if (hit.hasOwnProperty('_snippetResult')){
17
+ const snippetResult = hit._snippetResult;
18
+ if (typeof snippetResult === 'object'){
19
+ for (const key of Object.keys(snippetResult)) {
20
+ if (snippetResult[key].hasOwnProperty('matchLevel') && snippetResult[key].matchLevel !== 'none'){
21
+ content = content.length > 0 ? content.concat('<br>', snippetResult[key].value) : snippetResult[key].value;
22
+ }
23
+ }
24
+ }
25
+ }
26
+ if (hit.hasOwnProperty('_highlightResult')){
27
+
28
+ if (typeof hit._highlightResult === 'object'){
29
+ const highlightResult = hit._highlightResult;
30
+ for (const key of Object.keys(highlightResult)) {
31
+ if (key === 'html'){continue}
32
+ if (key === 'title'){continue}
33
+ if (typeof highlightResult[key] === 'object'){
34
+ if (Array.isArray(highlightResult[key])){
35
+ for (const item of highlightResult[key]){
36
+ if (typeof item === 'object') {
37
+ if (item.hasOwnProperty('matchLevel') && item.matchLevel !== 'none') {
38
+ chipContent = chipContent.length > 0 ? chipContent.concat(' ', `<span class="chip-item">${item.value}</span>`) : `<span><b>${key}:</b> </span><span class="chip-item">${item.value}</span>`;
39
+ }
40
+ }
41
+ }
42
+ } else if (highlightResult[key].hasOwnProperty('matchLevel') && highlightResult[key].matchLevel !== 'none'){
43
+ content = content.length > 0 ? content.concat('<br>', highlightResult[key].value) : highlightResult[key].value;
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return content.length > 0 ? chipContent.length > 0 ? content.concat('<br>', chipContent) : content : '';
50
+ }
51
+
52
+ const hitTemplate = function(hit) {
53
+ // Don't show anything until the user types in the box
54
+ const searchBox = document.getElementById('search-searchbar').getElementsByClassName('ais-search-box--input')[0];
55
+ if (searchBox?.value.length <= 0){return '';}
56
+
57
+ // Only show hits if they are posts; Don't show pages.
58
+ if (hit.hasOwnProperty('type') && hit.type !== 'post'){return '';}
59
+
60
+ const date = hit.date ? moment.unix(hit.date).format('MMM D, YYYY') : '';
61
+
62
+ let url = `{{ site.baseurl }}${hit.url}`;
63
+
64
+ const title = hit._highlightResult.title.value;
65
+
66
+ // TODO: Add breadcrumbs once I have more content
67
+ // let breadcrumbs = '';
68
+ // if (hit._highlightResult.headings) {
69
+ // breadcrumbs = hit._highlightResult.headings.map(match => {
70
+ // return `<span class="post-breadcrumb">${match.value}</span>`
71
+ // }).join(' > ')
72
+ // }
73
+
74
+ const postSummary = hit.hasOwnProperty('summary') ? hit.summary : '';
75
+
76
+ const content = checkForContent(hit);
77
+
78
+ let postTemplate = `
79
+ <span class="post-meta">${date}</span>
80
+ <h2><a class="post-link" href="${url}">${title}</a></h2>
81
+ `
82
+
83
+ if (postSummary.length > 0){
84
+ postTemplate = postTemplate.concat(' ', `<div class="post-snippet">${postSummary}</div>`)
85
+ }
86
+ if (content.length > 0){
87
+ postTemplate = postTemplate.concat(' ',
88
+ `
89
+ <h4 class="relevant-matches">Relevent matches within post:</h4>
90
+ <div class="post-snippet">${content}</div>
91
+ `
92
+ );
93
+ }
94
+
95
+ return `
96
+ <div class="post-item">
97
+ ${postTemplate}
98
+ </div>
99
+ `;
100
+ }
101
+
102
+
103
+ search.addWidget(
104
+ instantsearch.widgets.searchBox({
105
+ container: '#search-searchbar',
106
+ placeholder: 'Search through posts. Press ENTER to submit.',
107
+ searchAsYouType: false,
108
+ showReset: true,
109
+ showSubmit: true,
110
+ searchOnEnterKeyPressOnly: true,
111
+ showLoadingIndicator: true,
112
+ poweredBy: true, // This is required if you're on the free Community plan
113
+ cssClasses: {
114
+ input: 'bg-body'
115
+ }
116
+ })
117
+ );
118
+
119
+ search.addWidget(
120
+ instantsearch.widgets.hits({
121
+ container: '#search-hits',
122
+ templates: {
123
+ item: hitTemplate,
124
+ empty: '<p class="info">No results were found... Try changing your query or checking out the "Categories" or "Tags" pages.</p>'
125
+ }
126
+ })
127
+ );
128
+
129
+ search.start();
130
+ </script>
131
+
132
+ <style>
133
+ .ais-search-box {
134
+ max-width: 100%;
135
+ margin-bottom: 15px;
136
+ }
137
+ .post-item {
138
+ margin-bottom: 30px;
139
+ }
140
+ .post-link .ais-Highlight {
141
+ color: #111;
142
+ font-style: normal;
143
+ text-decoration: underline;
144
+ }
145
+ .post-breadcrumbs {
146
+ color: #424242;
147
+ display: block;
148
+ }
149
+ .post-breadcrumb {
150
+ font-size: 18px;
151
+ color: #424242;
152
+ }
153
+ .post-breadcrumb .ais-Highlight {
154
+ font-weight: bold;
155
+ font-style: normal;
156
+ }
157
+ .post-snippet .ais-Highlight {
158
+ color: #2a7ae2;
159
+ font-style: normal;
160
+ font-weight: bold;
161
+ }
162
+ .post-snippet img {
163
+ display: none;
164
+ }
165
+ </style>
@@ -0,0 +1,61 @@
1
+ <div class="sidebar-module about container">
2
+ <h4>{{ site.data.locales[site.default_locale].Aboutme }}</h4>
3
+ {%- assign abmPhoto = site.aboutme.photo -%}
4
+ {%- if abmPhoto.use_github_avatar -%}
5
+ {%- avatar{{ site.data.social.github.username }}size = 300 -%}
6
+ {%- elsif abmPhoto.asset_path -%}
7
+ <img
8
+ title="{{ site.author.name }}"
9
+ src="{{ abmPhoto.asset_path }}"
10
+ alt="{{ site.author.name }}"
11
+ />
12
+ {%- elsif abmPhoto.hosted_aboutme_photo -%}
13
+ <img
14
+ title="{{ site.author.name }}"
15
+ src="{{ abmPhoto.hosted_aboutme_photo }}"
16
+ alt="{{ site.author.name }}"
17
+ />
18
+ {%- endif -%}
19
+ <br>
20
+ <p>{{ site.aboutme.text }}</p>
21
+ <br>
22
+
23
+ {%- if site.show_contact_info == true -%}
24
+
25
+ <section id="contact-me">
26
+ <p>You can contact me via the <a href="/about/#contact-me">Contact Me</a> form or any of the below options:</p>
27
+ <div class="row">
28
+ {%- if site.email != empty -%}
29
+ <div class="col-1 mx-3">
30
+ <a href="mailto:{{ site.email }}" title="mailto: {{ site.email }}"
31
+ ><i class="bi bi-envelope" style="font-size: 2rem;"></i
32
+ ></a>
33
+ </div>
34
+ {%- endif -%}
35
+ {%- assign socials = site.data.social | where: "show_in_contact_me", "true" -%}
36
+ {%- if socials -%}
37
+ {%- for social in socials -%}
38
+ <div class="col-1 mx-3">
39
+ <a href="{{ social.url }}"
40
+ target="_blank"
41
+ rel="noopener noreferrer"
42
+ title="{{ social.name | capitalize }}: {{ social.username }}"
43
+ ><i class="{{ social.icon }}" style="font-size: 2rem;"></i>
44
+ </a>
45
+ </div>
46
+ {%- endfor -%}
47
+ {%- endif -%}
48
+ </div>
49
+ {%- endif -%}
50
+ </section>
51
+
52
+ <div
53
+ class="fb-like"
54
+ data-href="{{ site.url }}"
55
+ data-width=""
56
+ data-layout="button"
57
+ data-action="like"
58
+ data-size="large"
59
+ data-share="true"
60
+ ></div>
61
+ </div>
@@ -0,0 +1,7 @@
1
+ <div class="sidebar-module container">
2
+ <h4>{{ site.data.locales[site.default_locale].Blogroll }} <span><i class="bi bi-info-circle" title="Hover over the links below for extra details"></i></span></h4>
3
+ {%- for friend in site.data.blogroll -%}
4
+ <li><a href="{{ friend.href }}" target="_blank" rel="noopener noreferrer"
5
+ title="{{ friend.title }}">{{ friend.name }}</a></li>
6
+ {%- endfor -%}
7
+ </div>
@@ -0,0 +1,6 @@
1
+ {%- if site.aboutme.include == true -%}
2
+ {%- include sidebar/aboutme.html -%}
3
+ {%- endif -%}
4
+ {%- if site.include_blogroll ==true -%}
5
+ {%- include sidebar/blogroll.html -%}
6
+ {%- endif -%}
@@ -0,0 +1,21 @@
1
+ <ul class="tags-box">
2
+ {%- if site.posts != empty -%}
3
+ {%- for tag in site.tags -%}
4
+ <span class="badge bg-info">
5
+ <a href="#{{ tag[0] }}" title="{{ tag[0] }}" rel="{{ tag[1].size }}">{{ tag[0] }}<span class="size"> {{ tag[1].size }}</span></a>
6
+ </span>
7
+ {%- endfor -%}
8
+ </ul>
9
+
10
+ <ul class="tags-box">
11
+ {%- for tag in site.tags -%}
12
+ <li id="{{ tag[0] }}">{{ tag[0] }}</li>
13
+ {%- for post in tag[1] -%}
14
+ <time datetime="{{ post.date | date:"%Y-%m-%d" }}">{{ post.date | date:"%Y-%m-%d" }}</time> &raquo;
15
+ <a href="{{ site.baseurl }}{{ post.url }}" title="{{ post.title }}">{{ post.title }}</a><br />
16
+ {%- endfor -%}
17
+ {%- endfor -%}
18
+ {%- else -%}
19
+ <span>No posts</span>
20
+ {%- endif -%}
21
+ </ul>
@@ -0,0 +1,7 @@
1
+ <div id="toc-sidebar" class="nav flex-column" style="width: 175px">
2
+ <div class="toc-header">Contents</div>
3
+ <div id="toc-contents"></div>
4
+ </div>
5
+ <span aria-expanded="false" id="tocOpenBtn" class="badge text-bg-secondary" aria-label="mobile navigation"
6
+ onclick="toggleTOC()">TOC<br/><span id="chevron"
7
+ style="transform: rotate(-180deg)">&raquo;</span></span>
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <html data-bs-theme="dark" lang="{{ site.default_locale }}">
3
+
4
+ {%- include head.html -%}
5
+
6
+ <body>
7
+ <div class="container-fluid min-vh-100 d-flex flex-column justify-content-between">
8
+ <div class="page-content container-fluid">
9
+
10
+ {%- include navigation.html -%}
11
+
12
+ <div class="page-content container mt-5">
13
+ {{ content }}
14
+ </div>
15
+ </div>
16
+
17
+ {%- include footer.html -%}
18
+
19
+ </div>
20
+ </body>
21
+ </html>
@@ -0,0 +1,2 @@
1
+
2
+ {%- include home -%}
@@ -0,0 +1,11 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <article class="post">
6
+ <header class="post-header">
7
+ <h1 class="post-title">{{ page.title | escape }}</h1>
8
+ </header>
9
+ <br>
10
+ <div class="post-content">{{ content }}</div>
11
+ </article>
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ {%- include head.html -%}
5
+
6
+ <body>
7
+
8
+ {{content}}
9
+
10
+ {%- include footer.html -%}
11
+
12
+ </body>
13
+
14
+ </html>