<!-- [START] 関連記事-->
<b:if cond='data:blog.pageType == "item"'>
<div id='related-posts'></div>
<script type='text/javascript'>
const rp_current = "<data:post.url/>";
const rp_max = 3; // 表示記事数
const rp_head = "関連記事"; // タイトル
//<![CDATA[
(function(root, func) {
if (!root.RelatedPosts) {
root.RelatedPosts = func();
}
})(this, function() {
let _this = function RelatedPosts_constructor() {};
let count = 0;
let limit = 0;
let urls = [];
let titles = [];
let dates = [];
let imgs = [];
// フィード数分をカウント
_this.counter = function RelatedPosts_counter() {
limit++;
};
// 関連記事の書き込み
function RelatedPosts_write() {
// 重複処理
let dups = [];
let indexs = [];
for (let i = 0; i < urls.length; i++) {
if (dups.indexOf(urls[i]) == -1) {
dups.push(urls[i]);
indexs.push(i);
}
}
// ランダムインデックス生成
let idx, items = [];
let a = [...Array(indexs.length).keys()];
while (a.length > 0) {
idx = Math.floor(Math.random() * a.length);
items.push(a[idx]);
a.splice(idx, 1);
}
// 関連一覧の作成
let html;
let i = 0;
if (indexs.length > 0) {
html = '<div class="related-text">' + rp_head + '</div><div class="p-container">';
while (i < indexs.length && i < rp_max) {
html += '<a href="' + urls[indexs[items[i]]] + '"><figure class="related-img"><img alt="" width="250" height="150" src="' + imgs[indexs[items[i]]] + '"/></figure><div class="related-date">' + dates[indexs[items[i]]] + '</div><div class="related-title">' + titles[indexs[items[i]]] + '</div></a>';
i++;
}
html += '</div>';
document.getElementById("related-posts").innerHTML = html;
}
}
// フィードデータ追加
_this.add = function RelatedPosts_add(json) {
let m = rp_current.match(/^https?:\/\/(.+$)/);
let http = '';
let https = '';
if (m != null) {
http = 'http://' + m[1];
https = 'https://' + m[1];
}
for (let i = 0; i < json.feed.entry.length; i++) {
let entry = json.feed.entry[i];
for (let j = 0; j < entry.link.length; j++) {
if (entry.link[j].rel == 'alternate') {
if (!(http == entry.link[j].href || https == entry.link[j].href)) {
urls.push(entry.link[j].href);
titles.push(entry.title.$t);
let date = entry.published.$t.substr(0, 10).replace(/-/g, "/");
dates.push(date);
let img;
if ("media$thumbnail" in entry) {
img = entry.media$thumbnail.url;
let re1 = /\/s72-.*\//;
let re2 = /=s72-.*$/;
if (img.match(re1)) {
img = img.replace(re1, '/w250-h150-n/');
} else if (img.match(re2)) {
img = img.replace(re2, '=w250-h150-n');
} else if (img.match(/default.jpg/)) {
img = img.replace('default.jpg', 'mqdefault.jpg');
}
} else {
// NoImage画像
img = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJGufis0idCDqb29dBvyQCx5M5dHTE4bpc52w6WGtcdKpsQImJUUvWSFYn5k_IDsn1TjOhyfzw51TgvvabIrVAYjxasRmPjGTPdSKudZTYD6JA5DLW2rm-9fkahTfV4Cmn-GjsDaiCDnJ5/w250-h150-n-e365/noimg.jpg";
}
imgs.push(img);
}
break;
}
}
}
count++;
if (count == limit) {
RelatedPosts_write();
}
};
return _this;
});
//]]>
</script>
<b:loop values='data:post.labels' var='label'>
<script type='text/javascript'>RelatedPosts.counter();</script>
</b:loop>
<b:loop values='data:post.labels' var='label'>
<b:if cond='data:label.name contains "#" or data:label.name contains "/"'>
<script>
(function() {
let encoded = "<data:label.name/>"
const keys = [/・/g, /&amp;/g, /#/g, /\//g];
const reps = ["%E3%83%BB", "&", "%23", "%2F"];
for (let i = 0; i < keys.length; i++) {
encoded = encoded.replace(keys[i], reps[i]);
}
const src = "/feeds/posts/summary/-/" + encoded + "?alt=json&max-results=10&callback=RelatedPosts.add";
const js = document.createElement("script");
js.type = "text/javascript";
js.defer = true;
js.src = src;
document.head.appendChild(js);
}());
</script>
<b:else/>
<script defer='defer' expr:src='"/feeds/posts/summary/-/" + data:label.name + "?alt=json&max-results=10&callback=RelatedPosts.add"' type='text/javascript'/>
</b:if>
</b:loop>
<style>
#related-posts {
margin: 2em 0 0;
border-top: 1px dashed ; /*上線*/
border-bottom: 1px dashed ; /*下線*/
}
.related-text {
font-size: 1.2em; /*関連記事文字サイズ*/
font-weight: bold; /*関連記事太文字*/
text-align: center; /*関連記事中央寄せ*/
background: ; /*関連記事背景*/
padding: ;
margin-top: 1em;
margin-bottom: 1em;
}
.p-container {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
.p-container:after {
display: block;
content: "";
width: 32%;
}
#related-posts a {
display: block;
width: 32%;
min-height: 120px; /*記事の高さ*/
box-sizing: border-box;
margin-bottom: 1.5em;
transition: all .3s ease;
}
.related-img {
display: block;
height: 120px; /*記事の画像高さ*/
margin: 0;
overflow: hidden;
}
.related-img img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 0;
transition: .3s
}
.related-date {
font-size: 0em; /*日付文字サイズ*/
padding: .7em 0 .2em;
opacity: .8;
}
.related-title {
font-size: 0.9em; /*記事タイトル文字サイズ*/
text-align: center; /*記事タイトル中央寄せ*/
}
#related-posts a:hover {
text-decoration: underline; /*リンク下線変化有無*/
}
#related-posts a:hover .related-img img {
transform: scale(1.1); /*ホバー画像拡大*/
}
@media screen and (max-width:300px) { /*モバイル微調整*/
#related-posts a {
width: 49%;
}
}
</style>
</b:if>
<!--[END] 関連記事-->