WIP: Design #135
@ -208,13 +208,13 @@ class Log(Renderable, models.Model):
 | 
			
		||||
 | 
			
		||||
        return object_list if count is None else object_list[:count]
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def _next_index(items, date, default, pred=operator.lt):
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _next_index(cls, items, date, default, pred=operator.lt):
 | 
			
		||||
        iter = (i for i, v in enumerate(items) if pred(v.date, date))
 | 
			
		||||
        return next(iter, default)
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def _append_logs(object_list, logs, count, slice=None, group=False):
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _append_logs(cls, object_list, logs, count, slice=None, group=False):
 | 
			
		||||
        if slice:
 | 
			
		||||
            count = min(slice, count)
 | 
			
		||||
        logs = logs[:count]
 | 
			
		||||
@ -222,11 +222,27 @@ class Log(Renderable, models.Model):
 | 
			
		||||
            return object_list
 | 
			
		||||
 | 
			
		||||
        if group:
 | 
			
		||||
            object_list.append(logs)
 | 
			
		||||
            grouped = cls._group_logs_by_time(logs)
 | 
			
		||||
            object_list.extend(grouped)
 | 
			
		||||
        else:
 | 
			
		||||
            object_list += logs
 | 
			
		||||
        return object_list
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _group_logs_by_time(cls, logs):
 | 
			
		||||
        last_time = -1
 | 
			
		||||
        cum = []
 | 
			
		||||
        for log in logs:
 | 
			
		||||
            hour = log.date.time().hour
 | 
			
		||||
            if hour != last_time:
 | 
			
		||||
                if cum:
 | 
			
		||||
                    yield cum
 | 
			
		||||
                    cum = []
 | 
			
		||||
                last_time = hour
 | 
			
		||||
            cum.append(log)
 | 
			
		||||
        if cum:
 | 
			
		||||
            yield cum
 | 
			
		||||
 | 
			
		||||
    def print(self):
 | 
			
		||||
        r = []
 | 
			
		||||
        if self.diffusion:
 | 
			
		||||
 | 
			
		||||
@ -301,6 +301,7 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
 | 
			
		||||
.list-grid {
 | 
			
		||||
  display: grid;
 | 
			
		||||
  grid-template-columns: 1fr 1fr;
 | 
			
		||||
  grid-auto-flow: dense;
 | 
			
		||||
  gap: 1.2rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -301,6 +301,7 @@ preview-header:not(.no-cover) .card-headings .heading, preview-header:not(.no-co
 | 
			
		||||
.list-grid {
 | 
			
		||||
  display: grid;
 | 
			
		||||
  grid-template-columns: 1fr 1fr;
 | 
			
		||||
  grid-auto-flow: dense;
 | 
			
		||||
  gap: 1.2rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -39,16 +39,20 @@
 | 
			
		||||
    <ul class="urls">
 | 
			
		||||
        {% if page_obj.has_previous %}
 | 
			
		||||
        {% comment %}Translators: Bottom of the list, "previous page"{% endcomment %}
 | 
			
		||||
        <a href="?{{ GET }}&page={{ page_obj.previous_page_number }}" class="left button"
 | 
			
		||||
        <a href="?{{ GET }}&page={{ page_obj.previous_page_number }}" class="left"
 | 
			
		||||
            title="{% translate "Previous" %}"
 | 
			
		||||
            aria-label="{% translate "Previous" %}">
 | 
			
		||||
            <span class="icon"><i class="fa fa-chevron-left"></i></span>
 | 
			
		||||
        </a>
 | 
			
		||||
        {% endif %}
 | 
			
		||||
 | 
			
		||||
        <span>
 | 
			
		||||
            {{ page_obj.number }} / {{ page_obj.paginator.num_pages }}
 | 
			
		||||
        </span>
 | 
			
		||||
 | 
			
		||||
        {% if page_obj.has_next %}
 | 
			
		||||
        {% comment %}Translators: Bottom of the list, "Nextpage"{% endcomment %}
 | 
			
		||||
        <a href="?{{ GET }}&page={{ page_obj.next_page_number }}" class="right button"
 | 
			
		||||
        <a href="?{{ GET }}&page={{ page_obj.next_page_number }}" class="right"
 | 
			
		||||
                title="{% translate "Next" %}"
 | 
			
		||||
                aria-label="{% translate "Next" %}">
 | 
			
		||||
            <span class="icon"><i class="fa fa-chevron-right"></i></span>
 | 
			
		||||
 | 
			
		||||
@ -32,7 +32,7 @@ class HomeView(AttachedToMixin, BaseView, ListView):
 | 
			
		||||
            logs = logs.after(min_date)
 | 
			
		||||
        else:
 | 
			
		||||
            logs = logs.date(today)
 | 
			
		||||
        return Log.merge_diffusions(logs, object_list, diff_count=self.related_count, group_logs=True)
 | 
			
		||||
        return Log.merge_diffusions(logs, object_list, diff_count=self.related_count, log_slice=20, group_logs=True)
 | 
			
		||||
 | 
			
		||||
    def get_next_diffs(self):
 | 
			
		||||
        now = tz.now()
 | 
			
		||||
 | 
			
		||||
@ -71,6 +71,7 @@ class BasePageListView(AttachedToMixin, BasePageMixin, ParentMixin, BaseView, Li
 | 
			
		||||
 | 
			
		||||
            if not context.get("cover") and parent and parent.cover:
 | 
			
		||||
                context["cover"] = parent.cover.url
 | 
			
		||||
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -446,13 +446,17 @@
 | 
			
		||||
.list-grid {
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: 1fr 1fr;
 | 
			
		||||
    grid-auto-flow: dense;
 | 
			
		||||
    gap: v.$mp-4;
 | 
			
		||||
 | 
			
		||||
    // .grid-wide { grid-column: 1 / 3; }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@media screen and (max-width: v.$screen-smaller) {
 | 
			
		||||
    .list-grid {
 | 
			
		||||
        grid-template-columns: 1fr;
 | 
			
		||||
        // .grid-wide { grid-column: 1; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user