Added and internalized Pico theme for customization
							
								
								
									
										125
									
								
								themes/pico/static/css/gs_dark.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,125 @@
 | 
			
		|||
/*! Modified from GitHub's dark theme in primer/primitives.
 | 
			
		||||
 * MIT License
 | 
			
		||||
 * Copyright (c) 2018 GitHub Inc.
 | 
			
		||||
 * https://github.com/primer/primitives/blob/main/LICENSE
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 main {
 | 
			
		||||
    --color-prettylights-syntax-comment: #8b949e;
 | 
			
		||||
    --color-prettylights-syntax-constant: #79c0ff;
 | 
			
		||||
    --color-prettylights-syntax-entity: #d2a8ff;
 | 
			
		||||
    --color-prettylights-syntax-storage-modifier-import: #c9d1d9;
 | 
			
		||||
    --color-prettylights-syntax-entity-tag: #7ee787;
 | 
			
		||||
    --color-prettylights-syntax-keyword: #ff7b72;
 | 
			
		||||
    --color-prettylights-syntax-string: #a5d6ff;
 | 
			
		||||
    --color-prettylights-syntax-variable: #ffa657;
 | 
			
		||||
    --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
 | 
			
		||||
    --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
 | 
			
		||||
    --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
 | 
			
		||||
    --color-prettylights-syntax-carriage-return-text: #f0f6fc;
 | 
			
		||||
    --color-prettylights-syntax-carriage-return-bg: #b62324;
 | 
			
		||||
    --color-prettylights-syntax-string-regexp: #7ee787;
 | 
			
		||||
    --color-prettylights-syntax-markup-list: #f2cc60;
 | 
			
		||||
    --color-prettylights-syntax-markup-heading: #1f6feb;
 | 
			
		||||
    --color-prettylights-syntax-markup-italic: #c9d1d9;
 | 
			
		||||
    --color-prettylights-syntax-markup-bold: #c9d1d9;
 | 
			
		||||
    --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
 | 
			
		||||
    --color-prettylights-syntax-markup-deleted-bg: #67060c;
 | 
			
		||||
    --color-prettylights-syntax-markup-inserted-text: #aff5b4;
 | 
			
		||||
    --color-prettylights-syntax-markup-inserted-bg: #033a16;
 | 
			
		||||
    --color-prettylights-syntax-markup-changed-text: #ffdfb6;
 | 
			
		||||
    --color-prettylights-syntax-markup-changed-bg: #5a1e02;
 | 
			
		||||
    --color-prettylights-syntax-markup-ignored-text: #c9d1d9;
 | 
			
		||||
    --color-prettylights-syntax-markup-ignored-bg: #1158c7;
 | 
			
		||||
    --color-prettylights-syntax-meta-diff-range: #d2a8ff;
 | 
			
		||||
    --color-prettylights-syntax-brackethighlighter-angle: #8b949e;
 | 
			
		||||
    --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
 | 
			
		||||
    --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
 | 
			
		||||
    --color-btn-text: #c9d1d9;
 | 
			
		||||
    --color-btn-bg: rgb(45 51 59 / 80%);
 | 
			
		||||
    --color-btn-border: rgb(240 246 252 / 10%);
 | 
			
		||||
    --color-btn-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-inset-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-hover-bg: rgb(45 51 59 / 50%);
 | 
			
		||||
    --color-btn-hover-border: #8b949e;
 | 
			
		||||
    --color-btn-active-bg: hsl(212deg 12% 18% / 50%);
 | 
			
		||||
    --color-btn-active-border: #6e7681;
 | 
			
		||||
    --color-btn-selected-bg: rgb(45 51 59 / 50%);
 | 
			
		||||
    --color-btn-primary-text: #fff;
 | 
			
		||||
    --color-btn-primary-bg: #238636;
 | 
			
		||||
    --color-btn-primary-border: rgb(240 246 252 / 10%);
 | 
			
		||||
    --color-btn-primary-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-primary-inset-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-primary-hover-bg: #2ea043;
 | 
			
		||||
    --color-btn-primary-hover-border: rgb(240 246 252 / 10%);
 | 
			
		||||
    --color-btn-primary-selected-bg: #238636;
 | 
			
		||||
    --color-btn-primary-selected-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-primary-disabled-text: rgb(240 246 252 / 50%);
 | 
			
		||||
    --color-btn-primary-disabled-bg: rgb(35 134 54 / 60%);
 | 
			
		||||
    --color-btn-primary-disabled-border: rgb(240 246 252 / 10%);
 | 
			
		||||
    --color-action-list-item-default-hover-bg: rgb(144 157 171 / 12%);
 | 
			
		||||
    --color-segmented-control-bg: rgb(99 110 123 / 10%);
 | 
			
		||||
    --color-segmented-control-button-bg: transparent;
 | 
			
		||||
    --color-segmented-control-button-selected-border: #636e7b;
 | 
			
		||||
    --color-fg-default: #c9d1d9;
 | 
			
		||||
    --color-fg-muted: #8b949e;
 | 
			
		||||
    --color-fg-subtle: #484f58;
 | 
			
		||||
    --color-canvas-default: transparent;
 | 
			
		||||
    --color-canvas-overlay: rgb(22 27 34 / 90%);
 | 
			
		||||
    --color-canvas-inset: transparent;
 | 
			
		||||
    --color-canvas-subtle: transparent;
 | 
			
		||||
    --color-border-default: #30363d;
 | 
			
		||||
    --color-border-muted: #21262d;
 | 
			
		||||
    --color-neutral-muted: rgb(110 118 129 / 5%);
 | 
			
		||||
    --color-neutral-subtle: rgb(110 118 129 / 10%);
 | 
			
		||||
    --color-accent-fg: #58a6ff;
 | 
			
		||||
    --color-accent-emphasis: #1f6feb;
 | 
			
		||||
    --color-accent-muted: rgb(56 139 253 / 40%);
 | 
			
		||||
    --color-accent-subtle: rgb(65 132 228 / 10%);
 | 
			
		||||
    --color-success-fg: #3fb950;
 | 
			
		||||
    --color-attention-fg: #c69026;
 | 
			
		||||
    --color-attention-muted: rgb(174 124 20 / 40%);
 | 
			
		||||
    --color-attention-subtle: rgb(174 124 20 / 15%);
 | 
			
		||||
    --color-danger-fg: #f85149;
 | 
			
		||||
    --color-danger-muted: rgb(229 83 75 / 40%);
 | 
			
		||||
    --color-danger-subtle: rgb(229 83 75 / 10%);
 | 
			
		||||
    --color-primer-shadow-inset: 0 0 transparent;
 | 
			
		||||
    --color-scale-gray-7: #21262d;
 | 
			
		||||
    --color-scale-blue-8: #0c2d6b;
 | 
			
		||||
  
 | 
			
		||||
    /*! Extensions from @primer/css/alerts/flash.scss */
 | 
			
		||||
    --color-social-reaction-bg-hover: var(--color-scale-gray-7);
 | 
			
		||||
    --color-social-reaction-bg-reacted-hover: var(--color-scale-blue-8);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  main .pagination-loader-container {
 | 
			
		||||
    background-image: url("https://github.com/images/modules/pulls/progressive-disclosure-line-dark.svg");
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  .gsc-pagination-button {
 | 
			
		||||
    background-color: var(--color-btn-bg);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  .gsc-homepage-bg {
 | 
			
		||||
    background: linear-gradient(135deg, #05485c, #032e58, #2f0154);
 | 
			
		||||
    background-size: 600% 600%;
 | 
			
		||||
    animation: gradient 21s ease infinite;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @keyframes gradient {
 | 
			
		||||
    0% {
 | 
			
		||||
      background-position: 2% 0%;
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    50% {
 | 
			
		||||
      background-position: 99% 100%;
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    100% {
 | 
			
		||||
      background-position: 2% 0%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  main .gsc-loading-image {
 | 
			
		||||
    background-image: url("https://github.githubassets.com/images/mona-loading-dark.gif");
 | 
			
		||||
  }
 | 
			
		||||
							
								
								
									
										99
									
								
								themes/pico/static/css/gs_light.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,99 @@
 | 
			
		|||
/*! MIT License
 | 
			
		||||
 * Copyright (c) 2018 GitHub Inc.
 | 
			
		||||
 * https://github.com/primer/primitives/blob/main/LICENSE
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 main {
 | 
			
		||||
    --color-prettylights-syntax-comment: #6e7781;
 | 
			
		||||
    --color-prettylights-syntax-constant: #0550ae;
 | 
			
		||||
    --color-prettylights-syntax-entity: #8250df;
 | 
			
		||||
    --color-prettylights-syntax-storage-modifier-import: #24292f;
 | 
			
		||||
    --color-prettylights-syntax-entity-tag: #116329;
 | 
			
		||||
    --color-prettylights-syntax-keyword: #cf222e;
 | 
			
		||||
    --color-prettylights-syntax-string: #0a3069;
 | 
			
		||||
    --color-prettylights-syntax-variable: #953800;
 | 
			
		||||
    --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
 | 
			
		||||
    --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
 | 
			
		||||
    --color-prettylights-syntax-invalid-illegal-bg: #82071e;
 | 
			
		||||
    --color-prettylights-syntax-carriage-return-text: #f6f8fa;
 | 
			
		||||
    --color-prettylights-syntax-carriage-return-bg: #cf222e;
 | 
			
		||||
    --color-prettylights-syntax-string-regexp: #116329;
 | 
			
		||||
    --color-prettylights-syntax-markup-list: #3b2300;
 | 
			
		||||
    --color-prettylights-syntax-markup-heading: #0550ae;
 | 
			
		||||
    --color-prettylights-syntax-markup-italic: #24292f;
 | 
			
		||||
    --color-prettylights-syntax-markup-bold: #24292f;
 | 
			
		||||
    --color-prettylights-syntax-markup-deleted-text: #82071e;
 | 
			
		||||
    --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
 | 
			
		||||
    --color-prettylights-syntax-markup-inserted-text: #116329;
 | 
			
		||||
    --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
 | 
			
		||||
    --color-prettylights-syntax-markup-changed-text: #953800;
 | 
			
		||||
    --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
 | 
			
		||||
    --color-prettylights-syntax-markup-ignored-text: #eaeef2;
 | 
			
		||||
    --color-prettylights-syntax-markup-ignored-bg: #0550ae;
 | 
			
		||||
    --color-prettylights-syntax-meta-diff-range: #8250df;
 | 
			
		||||
    --color-prettylights-syntax-brackethighlighter-angle: #57606a;
 | 
			
		||||
    --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
 | 
			
		||||
    --color-prettylights-syntax-constant-other-reference-link: #0a3069;
 | 
			
		||||
    --color-btn-text: #24292f;
 | 
			
		||||
    --color-btn-bg: #f6f8fa;
 | 
			
		||||
    --color-btn-border: rgb(27 31 36 / 15%);
 | 
			
		||||
    --color-btn-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-inset-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-hover-bg: #f3f4f6;
 | 
			
		||||
    --color-btn-hover-border: rgb(27 31 36 / 15%);
 | 
			
		||||
    --color-btn-active-bg: hsl(220deg 14% 93% / 100%);
 | 
			
		||||
    --color-btn-active-border: rgb(27 31 36 / 15%);
 | 
			
		||||
    --color-btn-selected-bg: hsl(220deg 14% 94% / 100%);
 | 
			
		||||
    --color-btn-primary-text: #fff;
 | 
			
		||||
    --color-btn-primary-bg: #2da44e;
 | 
			
		||||
    --color-btn-primary-border: rgb(27 31 36 / 15%);
 | 
			
		||||
    --color-btn-primary-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-primary-inset-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-primary-hover-bg: #2c974b;
 | 
			
		||||
    --color-btn-primary-hover-border: rgb(27 31 36 / 15%);
 | 
			
		||||
    --color-btn-primary-selected-bg: hsl(137deg 55% 36% / 100%);
 | 
			
		||||
    --color-btn-primary-selected-shadow: 0 0 transparent;
 | 
			
		||||
    --color-btn-primary-disabled-text: rgb(255 255 255 / 80%);
 | 
			
		||||
    --color-btn-primary-disabled-bg: #94d3a2;
 | 
			
		||||
    --color-btn-primary-disabled-border: rgb(27 31 36 / 15%);
 | 
			
		||||
    --color-segmented-control-button-bg: transparent;
 | 
			
		||||
    --color-fg-default: #24292f;
 | 
			
		||||
    --color-fg-muted: #57606a;
 | 
			
		||||
    --color-fg-subtle: #6e7781;
 | 
			
		||||
    --color-canvas-default: transparent;
 | 
			
		||||
    --color-canvas-overlay: #fff;
 | 
			
		||||
    --color-canvas-inset: transparent;
 | 
			
		||||
    --color-canvas-subtle: transparent;
 | 
			
		||||
    --color-border-default: #adb4b9;
 | 
			
		||||
    --color-border-muted: hsl(210deg 18% 87% / 100%);
 | 
			
		||||
    --color-neutral-muted: rgb(175 184 193 / 20%);
 | 
			
		||||
    --color-accent-fg: #0969da;
 | 
			
		||||
    --color-accent-emphasis: #0969da;
 | 
			
		||||
    --color-accent-muted: rgb(130, 136, 141);
 | 
			
		||||
    --color-accent-subtle: #ddf4ff;
 | 
			
		||||
    --color-success-fg: #1a7f37;
 | 
			
		||||
    --color-attention-fg: #9a6700;
 | 
			
		||||
    --color-attention-muted: rgb(212 167 44 / 40%);
 | 
			
		||||
    --color-attention-subtle: #fff8c5;
 | 
			
		||||
    --color-danger-fg: #cf222e;
 | 
			
		||||
    --color-danger-muted: rgb(255 129 130 / 40%);
 | 
			
		||||
    --color-danger-subtle: #ffebe9;
 | 
			
		||||
    --color-primer-shadow-inset: 0 0 transparent;
 | 
			
		||||
    --color-primer-shadow-focus: 0 0 0 3px rgb(9 105 218 / 30%);
 | 
			
		||||
    --color-scale-gray-1: #eaeef2;
 | 
			
		||||
    --color-scale-blue-1: #b6e3ff;
 | 
			
		||||
  
 | 
			
		||||
    /*! Extensions from @primer/css/alerts/flash.scss */
 | 
			
		||||
    --color-social-reaction-bg-hover: var(--color-scale-gray-1);
 | 
			
		||||
    --color-social-reaction-bg-reacted-hover: var(--color-scale-blue-1);
 | 
			
		||||
  
 | 
			
		||||
    color-scheme: light;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  main .pagination-loader-container {
 | 
			
		||||
    background-image: url("https://github.com/images/modules/pulls/progressive-disclosure-line.svg");
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  main .gsc-loading-image {
 | 
			
		||||
    background-image: url("https://github.githubassets.com/images/mona-loading-default.gif");
 | 
			
		||||
  }
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								themes/pico/static/fonts/mulish-italic.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								themes/pico/static/fonts/mulish.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								themes/pico/static/fonts/urbanist.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								themes/pico/static/icons/close.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm175 79c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 513 B  | 
							
								
								
									
										5
									
								
								themes/pico/static/icons/copied.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
 | 
			
		||||
  <path fill-rule="evenodd" d="M10.854 7.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 9.793l2.646-2.647a.5.5 0 0 1 .708 0"/>
 | 
			
		||||
  <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1z"/>
 | 
			
		||||
  <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0z"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 580 B  | 
							
								
								
									
										4
									
								
								themes/pico/static/icons/copy.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
 | 
			
		||||
  <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1z"/>
 | 
			
		||||
  <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0z"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 421 B  | 
							
								
								
									
										1
									
								
								themes/pico/static/icons/dark.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6m0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8M8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0m0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13m8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5M3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8m10.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 0m-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 0m9.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 .707M4.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 .708"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 741 B  | 
							
								
								
									
										3
									
								
								themes/pico/static/icons/fb.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
 | 
			
		||||
<path d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 367 B  | 
							
								
								
									
										1
									
								
								themes/pico/static/icons/gh.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 640 B  | 
							
								
								
									
										1
									
								
								themes/pico/static/icons/light.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M6 .278a.77.77 0 0 1 .08.858 7.2 7.2 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277q.792-.001 1.533-.16a.79.79 0 0 1 .81.316.73.73 0 0 1-.031.893A8.35 8.35 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.75.75 0 0 1 6 .278M4.858 1.311A7.27 7.27 0 0 0 1.025 7.71c0 4.02 3.279 7.276 7.319 7.276a7.32 7.32 0 0 0 5.205-2.162q-.506.063-1.029.063c-4.61 0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 500 B  | 
							
								
								
									
										3
									
								
								themes/pico/static/icons/linkedin.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
 | 
			
		||||
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854zm4.943 12.248V6.169H2.542v7.225zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248S2.4 3.226 2.4 3.934c0 .694.521 1.248 1.327 1.248zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016l.016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225z"/>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 598 B  | 
							
								
								
									
										1
									
								
								themes/pico/static/icons/search.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 312 B  | 
							
								
								
									
										3
									
								
								themes/pico/static/icons/tg.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
 | 
			
		||||
                <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.287 5.906q-1.168.486-4.666 2.01-.567.225-.595.442c-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294q.39.01.868-.32 3.269-2.206 3.374-2.23c.05-.012.12-.026.166.016s.042.12.037.141c-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8 8 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629q.14.092.27.187c.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.4 1.4 0 0 0-.013-.315.34.34 0 0 0-.114-.217.53.53 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09"/>
 | 
			
		||||
              </svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 673 B  | 
							
								
								
									
										1
									
								
								themes/pico/static/icons/time.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71z"/><path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m7-8A7 7 0 1 1 1 8a7 7 0 0 1 14 0"/></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 235 B  | 
							
								
								
									
										3
									
								
								themes/pico/static/icons/wa.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
 | 
			
		||||
                <path d="M13.601 2.326A7.85 7.85 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.9 7.9 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.9 7.9 0 0 0 13.6 2.326zM7.994 14.521a6.6 6.6 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.56 6.56 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592m3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.73.73 0 0 0-.529.247c-.182.198-.691.677-.691 1.654s.71 1.916.81 2.049c.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058 1.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232"/>
 | 
			
		||||
              </svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								themes/pico/static/images/avatar.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 40 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								themes/pico/static/images/favicon.webp
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 208 B  | 
							
								
								
									
										17
									
								
								themes/pico/static/js/codecopy.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
function enableCopy() {
 | 
			
		||||
    document.querySelectorAll('pre:not(.mermaid)').forEach(node => {
 | 
			
		||||
      let copyBtn = document.createElement("span");
 | 
			
		||||
      copyBtn.classList.add('copybutton');
 | 
			
		||||
      copyBtn.classList.add('icon');
 | 
			
		||||
      copyBtn.classList.add('icon-copy');
 | 
			
		||||
        node.appendChild(copyBtn);
 | 
			
		||||
        copyBtn.addEventListener("click", async () => {
 | 
			
		||||
          if (navigator.clipboard) {
 | 
			
		||||
            let text = node.querySelectorAll('code')[0].innerText;
 | 
			
		||||
            await navigator.clipboard.writeText(text);
 | 
			
		||||
            copyBtn.classList.add('clicked');
 | 
			
		||||
          }
 | 
			
		||||
    setTimeout(() => copyBtn.classList.remove('clicked'), 600);
 | 
			
		||||
  })   
 | 
			
		||||
 })
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										105
									
								
								themes/pico/static/js/colortheme.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,105 @@
 | 
			
		|||
const cIcon = document.getElementById('cIcon');
 | 
			
		||||
mmdElements = document.getElementsByClassName('mermaid');
 | 
			
		||||
const mmdHTML = [];
 | 
			
		||||
for (let i = 0; i < mmdElements.length; i++) {
 | 
			
		||||
    mmdHTML[i] = mmdElements[i].innerHTML;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function mermaidRender(theme) {
 | 
			
		||||
    if ( theme == 'dark' ) {
 | 
			
		||||
        initOptions = {  
 | 
			
		||||
            startOnLoad: false, 
 | 
			
		||||
            theme: 'dark'
 | 
			
		||||
        } 
 | 
			
		||||
    } 
 | 
			
		||||
    else {
 | 
			
		||||
        initOptions = {  
 | 
			
		||||
            startOnLoad: false,
 | 
			
		||||
            theme: 'neutral' 
 | 
			
		||||
            }   
 | 
			
		||||
    }
 | 
			
		||||
    for (let i = 0; i < mmdElements.length; i++) {
 | 
			
		||||
        delete mmdElements[i].dataset.processed;
 | 
			
		||||
        mmdElements[i].innerHTML = mmdHTML[i];
 | 
			
		||||
    }
 | 
			
		||||
    mermaid.initialize(initOptions);
 | 
			
		||||
    mermaid.run();
 | 
			
		||||
}
 | 
			
		||||
function giscusRender(theme) {
 | 
			
		||||
    if (document.head.dataset['commentsEnabled'] == 'true'){  
 | 
			
		||||
        baseUrl = document.head.dataset['baseUrl'];
 | 
			
		||||
        themes = {
 | 
			
		||||
            "dark": `${baseUrl}css/gs_dark.css`,
 | 
			
		||||
            "light":`${baseUrl}css/gs_light.css`
 | 
			
		||||
        }
 | 
			
		||||
        giscus = document.getElementById('giscusScript');
 | 
			
		||||
        if (giscus){
 | 
			
		||||
            giscus.remove();
 | 
			
		||||
        }
 | 
			
		||||
        let js = document.createElement('script');
 | 
			
		||||
        js.setAttribute("id", 'giscusScript');
 | 
			
		||||
        js.setAttribute("src", document.head.dataset['giscusSrc']);
 | 
			
		||||
        js.setAttribute("data-repo", document.head.dataset['giscusRepo']);
 | 
			
		||||
        js.setAttribute("data-repo-id", document.head.dataset['giscusRepoId']);
 | 
			
		||||
        js.setAttribute("data-category", document.head.dataset['giscusCategory']);
 | 
			
		||||
        js.setAttribute("data-category-id", document.head.dataset['giscusCategoryId']);
 | 
			
		||||
        js.setAttribute("data-mapping", document.head.dataset['giscusMapping']);
 | 
			
		||||
        js.setAttribute("data-strict",document.head.dataset['giscusStrict']);
 | 
			
		||||
        js.setAttribute("data-reactions-enabled",document.head.dataset['giscusReactionsEnabled']);
 | 
			
		||||
        js.setAttribute("data-emit-metadata", document.head.dataset['giscusEmitMetadata']);
 | 
			
		||||
        js.setAttribute("data-input-position", document.head.dataset['giscusInputPosition']);
 | 
			
		||||
        js.setAttribute("data-theme", themes[theme]);
 | 
			
		||||
        js.setAttribute("data-lang", document.head.dataset['giscusLang']);
 | 
			
		||||
        js.setAttribute("crossorigin", document.head.dataset['giscusCrossorigin']);
 | 
			
		||||
        js.setAttribute("nonce", document.head.dataset['giscusNonce']);
 | 
			
		||||
        js.async = true;
 | 
			
		||||
        commentsBase = document.getElementById('giscusWidget').appendChild(js);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function setStartTheme(){
 | 
			
		||||
    let targetColorTheme = '';
 | 
			
		||||
    let currentTheme = localStorage.getItem('color-theme');
 | 
			
		||||
    if (currentTheme != null) {
 | 
			
		||||
        targetColorTheme = currentTheme
 | 
			
		||||
    } else { 
 | 
			
		||||
        const darkThemeMq = window.matchMedia("(prefers-color-scheme: dark)");
 | 
			
		||||
        if (darkThemeMq.matches) {
 | 
			
		||||
            targetColorTheme = 'dark';
 | 
			
		||||
            // opposite = 'light';
 | 
			
		||||
        } else {
 | 
			
		||||
            targetColorTheme = 'light';
 | 
			
		||||
            // opposite = 'dark';
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    cIcon.classList.remove('icon-'+currentTheme);
 | 
			
		||||
    cIcon.classList.add('icon-'+targetColorTheme);
 | 
			
		||||
    document.head.dataset.colorTheme = targetColorTheme;
 | 
			
		||||
    document.documentElement.setAttribute('color-theme', targetColorTheme);
 | 
			
		||||
    localStorage.setItem('color-theme',targetColorTheme);
 | 
			
		||||
    giscusRender(targetColorTheme);
 | 
			
		||||
    mermaidRender(targetColorTheme);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function switchTheme() {
 | 
			
		||||
    currentTheme = document.documentElement.getAttribute('color-theme')
 | 
			
		||||
    if (currentTheme == 'dark') {
 | 
			
		||||
        targetColorTheme = 'light';
 | 
			
		||||
    }
 | 
			
		||||
    if ( currentTheme == 'light') {
 | 
			
		||||
        targetColorTheme = 'dark';
 | 
			
		||||
    }
 | 
			
		||||
    cIcon.classList.remove('icon-'+currentTheme);
 | 
			
		||||
    cIcon.classList.add('icon-'+targetColorTheme);
 | 
			
		||||
    document.documentElement.setAttribute('color-theme', targetColorTheme);
 | 
			
		||||
    document.head.dataset.colorTheme = targetColorTheme;
 | 
			
		||||
    localStorage.setItem('color-theme',targetColorTheme);
 | 
			
		||||
    giscusRender(targetColorTheme)
 | 
			
		||||
    mermaidRender(targetColorTheme)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
document.getElementById("cIcon").addEventListener("click", switchTheme);
 | 
			
		||||
							
								
								
									
										8
									
								
								themes/pico/static/js/init.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
document.addEventListener("DOMContentLoaded", function(event){
 | 
			
		||||
    setStartTheme();
 | 
			
		||||
    enableCopy();
 | 
			
		||||
    if (document.head.dataset['buildSearchIndex'] == "true") {
 | 
			
		||||
      initSearch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  });
 | 
			
		||||
							
								
								
									
										1759
									
								
								themes/pico/static/js/mermaid.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										202
									
								
								themes/pico/static/js/search.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,202 @@
 | 
			
		|||
function debounce(func, wait) {
 | 
			
		||||
  var timeout;
 | 
			
		||||
 | 
			
		||||
  return function () {
 | 
			
		||||
    var context = this;
 | 
			
		||||
    var args = arguments;
 | 
			
		||||
    clearTimeout(timeout);
 | 
			
		||||
 | 
			
		||||
    timeout = setTimeout(function () {
 | 
			
		||||
      timeout = null;
 | 
			
		||||
      func.apply(context, args);
 | 
			
		||||
    }, wait);
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeTeaser(body, terms) {
 | 
			
		||||
  var TERM_WEIGHT = 40;
 | 
			
		||||
  var NORMAL_WORD_WEIGHT = 2;
 | 
			
		||||
  var FIRST_WORD_WEIGHT = 8;
 | 
			
		||||
  var TEASER_MAX_WORDS = 20;
 | 
			
		||||
 | 
			
		||||
  var stemmedTerms = terms.map(function (w) {
 | 
			
		||||
    return elasticlunr.stemmer(w.toLowerCase());
 | 
			
		||||
  });
 | 
			
		||||
  var termFound = false;
 | 
			
		||||
  var index = 0;
 | 
			
		||||
  var weighted = []; // contains elements of ["word", weight, index_in_document]
 | 
			
		||||
 | 
			
		||||
  // split in sentences, then words
 | 
			
		||||
  var sentences = body.toLowerCase().split(". ");
 | 
			
		||||
 | 
			
		||||
  for (var i in sentences) {
 | 
			
		||||
    var words = sentences[i].split(" ");
 | 
			
		||||
    var value = FIRST_WORD_WEIGHT;
 | 
			
		||||
 | 
			
		||||
    for (var j in words) {
 | 
			
		||||
      var word = words[j];
 | 
			
		||||
 | 
			
		||||
      if (word.length > 0) {
 | 
			
		||||
        for (var k in stemmedTerms) {
 | 
			
		||||
          if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) {
 | 
			
		||||
            value = TERM_WEIGHT;
 | 
			
		||||
            termFound = true;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        weighted.push([word, value, index]);
 | 
			
		||||
        value = NORMAL_WORD_WEIGHT;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      index += word.length;
 | 
			
		||||
      index += 1;  // ' ' or '.' if last word in sentence
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    index += 1;  // because we split at a two-char boundary '. '
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (weighted.length === 0) {
 | 
			
		||||
    return body;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var windowWeights = [];
 | 
			
		||||
  var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS);
 | 
			
		||||
  // We add a window with all the weights first
 | 
			
		||||
  var curSum = 0;
 | 
			
		||||
  for (var i = 0; i < windowSize; i++) {
 | 
			
		||||
    curSum += weighted[i][1];
 | 
			
		||||
  }
 | 
			
		||||
  windowWeights.push(curSum);
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < weighted.length - windowSize; i++) {
 | 
			
		||||
    curSum -= weighted[i][1];
 | 
			
		||||
    curSum += weighted[i + windowSize][1];
 | 
			
		||||
    windowWeights.push(curSum);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // If we didn't find the term, just pick the first window
 | 
			
		||||
  var maxSumIndex = 0;
 | 
			
		||||
  if (termFound) {
 | 
			
		||||
    var maxFound = 0;
 | 
			
		||||
    // backwards
 | 
			
		||||
    for (var i = windowWeights.length - 1; i >= 0; i--) {
 | 
			
		||||
      if (windowWeights[i] > maxFound) {
 | 
			
		||||
        maxFound = windowWeights[i];
 | 
			
		||||
        maxSumIndex = i;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var teaser = [];
 | 
			
		||||
  var startIndex = weighted[maxSumIndex][2];
 | 
			
		||||
  for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) {
 | 
			
		||||
    var word = weighted[i];
 | 
			
		||||
    if (startIndex < word[2]) {
 | 
			
		||||
      // missing text from index to start of `word`
 | 
			
		||||
      teaser.push(body.substring(startIndex, word[2]));
 | 
			
		||||
      startIndex = word[2];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // add <em/> around search terms
 | 
			
		||||
    if (word[1] === TERM_WEIGHT) {
 | 
			
		||||
      teaser.push("<b>");
 | 
			
		||||
    }
 | 
			
		||||
    startIndex = word[2] + word[0].length;
 | 
			
		||||
    teaser.push(body.substring(word[2], startIndex));
 | 
			
		||||
 | 
			
		||||
    if (word[1] === TERM_WEIGHT) {
 | 
			
		||||
      teaser.push("</b>");
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  teaser.push("…");
 | 
			
		||||
  return teaser.join("");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function formatSearchResultItem(item, terms) {
 | 
			
		||||
  return '<div class="search-results__item">'
 | 
			
		||||
  + `<h4><a href="${item.ref}">${item.doc.title}</a></h4>`
 | 
			
		||||
  + `<div class="teaser">${makeTeaser(item.doc.body, terms)}</div>`
 | 
			
		||||
  + '</div>';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function initSearch() {
 | 
			
		||||
  var $searchInput = document.getElementById("searchInput");
 | 
			
		||||
  var $searchResults = document.getElementById('sResults');
 | 
			
		||||
  var $searchResultsItems = document.getElementById('sResultsUL')
 | 
			
		||||
  var MAX_ITEMS = 5;
 | 
			
		||||
 | 
			
		||||
  var options = {
 | 
			
		||||
    bool: "AND",
 | 
			
		||||
    fields: {
 | 
			
		||||
      title: {boost: 2},
 | 
			
		||||
      body: {boost: 1},
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  var currentTerm = "";
 | 
			
		||||
  var index;
 | 
			
		||||
  
 | 
			
		||||
  var initIndex = async function () {
 | 
			
		||||
    if (index === undefined) {
 | 
			
		||||
      let $baseUrl = document.head.dataset['baseUrl']
 | 
			
		||||
      index = fetch($baseUrl + "search_index.en.json")
 | 
			
		||||
        .then(
 | 
			
		||||
          async function(response) {
 | 
			
		||||
            return await elasticlunr.Index.load(await response.json());
 | 
			
		||||
        }
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    let res = await index;
 | 
			
		||||
    return res;
 | 
			
		||||
    
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $searchInput.addEventListener("keyup", debounce(async function() {
 | 
			
		||||
    if ($searchInput.value != '') {
 | 
			
		||||
      $searchInput.classList.add("textIn")
 | 
			
		||||
    } else {
 | 
			
		||||
      $searchInput.classList.remove("textIn")
 | 
			
		||||
    }
 | 
			
		||||
    var term = $searchInput.value.trim();
 | 
			
		||||
    if (term === currentTerm) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    $searchResults.style.display = term === "" ? "none" : "block";
 | 
			
		||||
    $searchResultsItems.innerHTML = "";
 | 
			
		||||
    $searchResults.style.top = `${document.documentElement.scrollTop}px`;
 | 
			
		||||
    $searchResultsItems.style.display="block";
 | 
			
		||||
    $searchResultsItems.style.transition="opacity 3s";
 | 
			
		||||
    
 | 
			
		||||
    currentTerm = term;
 | 
			
		||||
    if (term === "") {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var results = (await initIndex()).search(term, options);
 | 
			
		||||
    if (results.length === 0) {
 | 
			
		||||
      $searchResults.style.display = "none";
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    var item = document.createElement("li");
 | 
			
		||||
    clSearch = `<span class="closeBtn icon icon-close" onclick="closeSearchResults();"></span>`
 | 
			
		||||
    item.innerHTML = clSearch;
 | 
			
		||||
    $searchResultsItems.appendChild(item);
 | 
			
		||||
 | 
			
		||||
    for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) {
 | 
			
		||||
      var item = document.createElement("li");
 | 
			
		||||
      item.innerHTML = formatSearchResultItem(results[i], term.split(" "));
 | 
			
		||||
      $searchResultsItems.appendChild(item);
 | 
			
		||||
    }
 | 
			
		||||
  }, 150));
 | 
			
		||||
 | 
			
		||||
  window.addEventListener('click', function(e) {
 | 
			
		||||
    if ($searchResults.style.display == "block" && !$searchResults.contains(e.target)) {
 | 
			
		||||
      $searchResults.style.display = "block";
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function closeSearchResults() {
 | 
			
		||||
  document.getElementById("sResults").style.display="none";
 | 
			
		||||
  document.getElementById("searchInput").value="";
 | 
			
		||||
  document.getElementById("searchInput").classList.remove("textIn");
 | 
			
		||||
  initSearch;
 | 
			
		||||
}
 | 
			
		||||