forked from nyancrimew/maia.crimew.gay
		
	show related posts at the bottom of blog posts
This commit is contained in:
		
							parent
							
								
									cb41f112e4
								
							
						
					
					
						commit
						1bf8394678
					
				
					 5 changed files with 56 additions and 6 deletions
				
			
		|  | @ -48,8 +48,6 @@ module.exports = function (eleventyConfig) { | ||||||
|     return str.split('/').map(part => encodeURI(part)).join('/') |     return str.split('/').map(part => encodeURI(part)).join('/') | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   // TODO: this appears to potentially be dependent on rendering order
 |  | ||||||
|   // TODO: actually add to the post ui
 |  | ||||||
|   eleventyConfig.addFilter("related", function(obj) { |   eleventyConfig.addFilter("related", function(obj) { | ||||||
|     const post = this.ctx; |     const post = this.ctx; | ||||||
|     const posts = this.ctx.collections.posts.map(post => post.data); |     const posts = this.ctx.collections.posts.map(post => post.data); | ||||||
|  | @ -64,13 +62,14 @@ module.exports = function (eleventyConfig) { | ||||||
|       serializer: (doc) => [doc.title, doc.description], |       serializer: (doc) => [doc.title, doc.description], | ||||||
|       weights: [10, 10], |       weights: [10, 10], | ||||||
|     })(post, posts).map(result => { |     })(post, posts).map(result => { | ||||||
|  |       console.log(result.document); | ||||||
|       return { |       return { | ||||||
|         relative: result.relative + tagScore(post, result.document), |         relative: result.relative + tagScore(post, result.document), | ||||||
|         document: result.document |         document: result.document | ||||||
|       } |       } | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     return results.filter(result => result.relative > 0.0).slice(0,3); |     return results.filter(result => result.relative > 0.2).sort((a, b) => a.relative - b.relative).reverse().slice(0,3); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   eleventyConfig.addCollection('posts', collection => { |   eleventyConfig.addCollection('posts', collection => { | ||||||
|  |  | ||||||
|  | @ -17,8 +17,8 @@ subhead: blog | ||||||
|                 <span class="readtime">{{ content | timeToRead }} to read</span> |                 <span class="readtime">{{ content | timeToRead }} to read</span> | ||||||
|                 <span class="middot"></span> |                 <span class="middot"></span> | ||||||
|                 <span>by <span class="author by" id="author">{{ site.name }}</span></span> |                 <span>by <span class="author by" id="author">{{ site.name }}</span></span> | ||||||
|                 <span class="middot"></span> |  | ||||||
|                 {% if tags %} |                 {% if tags %} | ||||||
|  |                     <span class="middot"></span> | ||||||
|                     <span>in  |                     <span>in  | ||||||
|                         {% for tag in tags %} |                         {% for tag in tags %} | ||||||
|                             <span class="tag"><a href="/posts/tagged/{{ tag | slugify }}/">{{ tag }}</a></span>{% if not loop.last %}, {% endif %} |                             <span class="tag"><a href="/posts/tagged/{{ tag | slugify }}/">{{ tag }}</a></span>{% if not loop.last %}, {% endif %} | ||||||
|  | @ -47,4 +47,35 @@ subhead: blog | ||||||
|             </div> |             </div> | ||||||
|         </a> |         </a> | ||||||
|     </article> |     </article> | ||||||
|  |     {% for rel in "" | related %} | ||||||
|  |         {% if loop.first %} | ||||||
|  |         <div class="related"> | ||||||
|  |         <h3>related posts</h3> | ||||||
|  |         <ul> | ||||||
|  |         {% endif %} | ||||||
|  |         <li class="list-entry"> | ||||||
|  |             <!-- rank {{ rel.relative }} --> | ||||||
|  |             <a href="{{ rel.document.page.url }}"><h4>{{ rel.document.title }}</h4></a> | ||||||
|  |             <div class="byline"> | ||||||
|  |                 <time datetime="{{ rel.document.page.date | date_to_datetime }}">{{ rel.document.page.date | date_formatted }}</time> | ||||||
|  |                 {% if rel.document.changed_date %} | ||||||
|  |                     <small class="updated">(updated <time datetime="{{ rel.document.changed_date | date_to_datetime }}">{{ rel.document.changed_date | date_formatted }}</time>)</small> | ||||||
|  |                 {% endif %} | ||||||
|  |                 <span class="middot"></span> | ||||||
|  |                 <span class="readtime">{{ rel.document.content | timeToRead }} to read</span> | ||||||
|  |                 <span class="middot"></span> | ||||||
|  |                 <span>by <span class="author by" id="author">{{ site.name }}</span></span> | ||||||
|  |                 {% if rel.document.tags %} | ||||||
|  |                     <span class="middot"></span> | ||||||
|  |                     <span>in  | ||||||
|  |                     {% for tag in rel.document.tags %} | ||||||
|  |                         <span class="tag"><a href="/posts/tagged/{{ tag | slugify }}/">{{ tag }}</a></span>{% if not loop.last %}, {% endif %} | ||||||
|  |                     {% endfor %} | ||||||
|  |                     </span> | ||||||
|  |                 {% endif %} | ||||||
|  |             </div> | ||||||
|  |             <span class="lead"><strong>{{ rel.document.description }}</strong></span> | ||||||
|  |         </li> | ||||||
|  |         {% if loop.last %}</ul></div>{% endif %} | ||||||
|  |     {% endfor %} | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
|  | @ -79,6 +79,26 @@ time, | ||||||
|   border-bottom: 1px dotted rgb(219, 103, 167); |   border-bottom: 1px dotted rgb(219, 103, 167); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .related { | ||||||
|  |   margin-top: 18px; | ||||||
|  |   border-top: 1px dotted rgb(219, 103, 167); | ||||||
|  | 
 | ||||||
|  |   h3 { | ||||||
|  |     margin-top: 4px; | ||||||
|  |     margin-bottom: 0; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   ul { | ||||||
|  |     margin-top: 4px; | ||||||
|  |     padding-left: 0; | ||||||
|  | 
 | ||||||
|  |     h4 { | ||||||
|  |       margin-top: 4px; | ||||||
|  |       margin-bottom: 0; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .article_header>h1, | .article_header>h1, | ||||||
| .page_header>h1 { | .page_header>h1 { | ||||||
|   margin: 0.1rem; |   margin: 0.1rem; | ||||||
|  |  | ||||||
|  | @ -22,8 +22,8 @@ permalink: /posts/{% if pagination.pageNumber > 0 %}page/{{ pagination.pageNumbe | ||||||
|         <span class="readtime">{{ entry.content | timeToRead }} to read</span> |         <span class="readtime">{{ entry.content | timeToRead }} to read</span> | ||||||
|         <span class="middot"></span> |         <span class="middot"></span> | ||||||
|         <span>by <span class="author by" id="author">{{ site.name }}</span></span> |         <span>by <span class="author by" id="author">{{ site.name }}</span></span> | ||||||
|         <span class="middot"></span> |  | ||||||
|         {% if entry.data.tags %} |         {% if entry.data.tags %} | ||||||
|  |             <span class="middot"></span> | ||||||
|             <span>in  |             <span>in  | ||||||
|                 {% for tag in entry.data.tags %} |                 {% for tag in entry.data.tags %} | ||||||
|                     <span class="tag"><a href="/posts/tagged/{{ tag | slugify }}/">{{ tag }}</a></span>{% if not loop.last %}, {% endif %} |                     <span class="tag"><a href="/posts/tagged/{{ tag | slugify }}/">{{ tag }}</a></span>{% if not loop.last %}, {% endif %} | ||||||
|  |  | ||||||
|  | @ -29,8 +29,8 @@ date: git Last Modified | ||||||
|           {% endif %} |           {% endif %} | ||||||
|           <span class="middot"></span> |           <span class="middot"></span> | ||||||
|           <span>by <span class="author by" id="author">{{ site.name }}</span></span> |           <span>by <span class="author by" id="author">{{ site.name }}</span></span> | ||||||
|           <span class="middot"></span> |  | ||||||
|           {% if entry.data.tags %} |           {% if entry.data.tags %} | ||||||
|  |               <span class="middot"></span> | ||||||
|               <span>in  |               <span>in  | ||||||
|                   {% for tag in entry.data.tags %} |                   {% for tag in entry.data.tags %} | ||||||
|                       <span class="tag"><a href="/posts/tagged/{{ tag | slugify }}/">{{ tag }}</a></span>{% if not loop.last %}, {% endif %} |                       <span class="tag"><a href="/posts/tagged/{{ tag | slugify }}/">{{ tag }}</a></span>{% if not loop.last %}, {% endif %} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue