diff --git a/_layouts/home.html b/_layouts/home.html
index e44efe8f4cb..451e391cd6d 100644
--- a/_layouts/home.html
+++ b/_layouts/home.html
@@ -5,38 +5,45 @@
{% include lang.html %}
-{% assign pinned = site.posts | where: 'pin', 'true' %}
-{% assign default = site.posts | where_exp: 'item', 'item.pin != true and item.hidden != true' %}
+{% assign all_pinned = site.posts | where: 'pin', 'true' %}
+{% assign all_normal = site.posts | where_exp: 'item', 'item.pin != true and item.hidden != true' %}
{% assign posts = '' | split: '' %}
-
+
-{% assign offset = paginator.page | minus: 1 | times: paginator.per_page %}
-{% assign pinned_num = pinned.size | minus: offset %}
+{% assign visible_start = paginator.page | minus: 1 | times: paginator.per_page %}
+{% assign visible_end = visible_start | plus: paginator.per_page %}
-{% if pinned_num > 0 %}
- {% for i in (offset..pinned.size) limit: pinned_num %}
- {% assign posts = posts | push: pinned[i] %}
+{% if all_pinned.size > visible_start %}
+ {% if all_pinned.size > visible_end %}
+ {% assign pinned_size = paginator.per_page %}
+ {% else %}
+ {% assign pinned_size = all_pinned.size | minus: visible_start %}
+ {% endif %}
+
+ {% for i in (visible_start..all_pinned.size) limit: pinned_size %}
+ {% assign posts = posts | push: all_pinned[i] %}
{% endfor %}
{% else %}
- {% assign pinned_num = 0 %}
+ {% assign pinned_size = 0 %}
{% endif %}
-
+
-{% assign default_beg = offset | minus: pinned.size %}
+{% assign normal_size = paginator.posts | size | minus: pinned_size %}
-{% if default_beg < 0 %}
- {% assign default_beg = 0 %}
-{% endif %}
+{% if normal_size > 0 %}
+ {% if pinned_size > 0 %}
+ {% assign normal_start = 0 %}
+ {% else %}
+ {% assign normal_start = visible_start | minus: all_pinned.size %}
+ {% endif %}
-{% assign default_num = paginator.posts | size | minus: pinned_num %}
-{% assign default_end = default_beg | plus: default_num | minus: 1 %}
+ {% assign normal_end = normal_start | plus: normal_size | minus: 1 %}
-{% if default_num > 0 %}
- {% for i in (default_beg..default_end) %}
- {% assign posts = posts | push: default[i] %}
+ {% for i in (normal_start..normal_end) %}
+ {% assign posts = posts | push: all_normal[i] %}
{% endfor %}
{% endif %}