Compare commits

..

No commits in common. "f66fa8138d543cc3621707ddd4e1d2fac76ce8cd" and "2fbf3ec0ebbf17f2cfb6068682ff138cb7fa8daa" have entirely different histories.

3 changed files with 18 additions and 34 deletions

View file

@ -7,7 +7,6 @@ from io import BytesIO
from pathlib import Path
import os
from os.path import relpath, splitext
import random
import re
import readline
import shutil
@ -92,8 +91,6 @@ MULTIPART_RAR_TAIL_REGEX = re.compile(r'^(.+)\.part0*([^1]|[^0].+)\.rar$', re.I)
PDF_REFERENCED_IMAGE_REGEX = re.compile(r'(^|(?<=\s))/(?P<ref_name>\S+)\s+Do($|(?=\s))')
PDF_INLINE_IMAGE_REGEX = re.compile(r'(^|\s)(BI|ID|EI)($|\s)')
SUGGESTED_WORKS_COUNT = 10
debug_mode = False
def debug(s):
if debug_mode:
@ -1015,23 +1012,18 @@ def similarity(a, b):
memoized_similarities[(shorter, longer)] = result
return result
def top(items, n, key, overflow=0):
def top(items, n, key):
winners = []
for item in items:
score = key(item)
if len(winners) < n or score >= winners[-1][1]:
if len(winners) < n or score > winners[-1][1]:
for i in range(len(winners) + 1):
if i == len(winners) or score >= winners[i][1]:
if i == len(winners) or score > winners[i][1]:
winners.insert(i, (item, score))
break
while len(winners) > n and winners[-1][1] < winners[n-1][1]:
while len(winners) > n:
winners.pop()
# shuffle followed by stable sort to randomly shuffle within each score tier
random.shuffle(winners)
winners.sort(key=lambda w: w[1], reverse=True)
return [item for (item, score) in winners[:n+overflow]]
return [item for (item, score) in winners]
def generate(args):
jenv = Environment(
@ -1088,7 +1080,7 @@ def generate(args):
if work['series'] and work['series'] == other_work['series']:
return -1
return similarity(work['title'], other_work['title'])
suggested = top(works, SUGGESTED_WORKS_COUNT, suggestion_priority)
suggested = top(works, 6, suggestion_priority)
work_dir = site_dir / 'works' / work['id']
viewer_dir = work_dir / 'view'

View file

@ -139,19 +139,19 @@ body {
.work-info td, .work-info th {
vertical-align: top;
padding-top: 5px;
}
.work-info tr.bubbles th {
padding-top: 14px;
.work-info td {
padding-top: 5px;
}
.work-info th {
text-align: right;
padding-right: 10px;
padding-top: 10px;
}
.bubbles a {
.work-info-link {
background: #333;
padding: 5px;
border-radius: 5px;
@ -159,10 +159,6 @@ body {
margin-bottom: 5px;
}
.work-info table {
margin-bottom: 15px;
}
#suggested-subheader {
text-align: center;
}

View file

@ -12,33 +12,29 @@
<div class="work-info">
<table>
{% if work['circle'] %}
<tr class="bubbles">
<tr>
<th>Circle</th>
<td><a href="{{ root() }}/circles/{{ urlcat(work['circle']) }}/{{ index() }}">{{ work['circle'] }}</a></td>
<td><a class="work-info-link" href="{{ root() }}/circles/{{ urlcat(work['circle']) }}/{{ index() }}">{{ work['circle'] }}</a></td>
</tr>
{% endif %}
{% if work['authors'] %}
<tr class="bubbles">
<tr>
<th>Authors</th>
<td>{% for author in work['authors'] %}<a href="{{ root() }}/authors/{{ urlcat(author) }}/{{ index() }}">{{ author }}</a> {% endfor %}</td>
<td>{% for author in work['authors'] %}<a class="work-info-link" href="{{ root() }}/authors/{{ urlcat(author) }}/{{ index() }}">{{ author }}</a> {% endfor %}</td>
</tr>
{% endif %}
{% if work['tags'] %}
<tr class="bubbles">
<tr>
<th>Tags</th>
<td>{% for tag in work['tags'] %}<a href="{{ root() }}/tags/{{ urlcat(tag) }}/{{ index() }}">{{ tag }}</a> {% endfor %}</td>
<td>{% for tag in work['tags'] %}<a class="work-info-link" href="{{ root() }}/tags/{{ urlcat(tag) }}/{{ index() }}">{{ tag }}</a> {% endfor %}</td>
</tr>
{% endif %}
{% if work['series'] %}
<tr class="bubbles">
<tr>
<th>Series</th>
<td><a href="{{ root() }}/series/{{ urlcat(work['series']) }}/{{ index() }}">{{ work['series'] }}</a></td>
<td><a class="work-info-link" href="{{ root() }}/series/{{ urlcat(work['series']) }}/{{ index() }}">{{ work['series'] }}</a></td>
</tr>
{% endif %}
<tr>
<th>Pages</th>
<td>{{ work['images'] | length }}</td>
</tr>
</table>
{% if work['description'] %}
{{ work['description'] }}