$('body').append(''); const storedKey = 'popupdata'; $(document).ready(function(){ if ($('body').hasClass('show-popup')) { if (location.href.indexOf('popupreset=1') != -1) { localStorage.removeItem(storedKey); location.href = location.href.replace('popupreset=1', ''); } $.ajax({ url: book_api_url_root + '/api/banners', type: 'get', cache: false, dataType:'json', data:{ key: book_api_key, token: get_token(), num: 100, layout_num: 2 } }).done(function(data){ var banners = data.banners; var storedArray = []; var storedData = localStorage.getItem(storedKey); if (storedData) { storedArray = JSON.parse(storedData); } console.dir(storedArray); if (banners.length > 0) { var tmp = []; banners.forEach(function(banner){ if (banner.book_content_id) { tmp[tmp.length] = banner; } }); banners = tmp; var tmp = []; banners.forEach(function(banner){ var result = false; storedArray.forEach(function(tmpObj){ if (tmpObj['id'] == banner.book_content_id) { result = true; } }); if (!result) { tmp[tmp.length] = banner; } }); banners = tmp; $('body').attr('data-popup-cnt', banners.length); if (banners.length >= 0) { $('body').append(''); banners.forEach(function(banner){ for (const key in banner) { if (typeof banner[key] === "string") { banner[key] = escapeHTML(banner[key]); } } var popup = $('#popup-modal-template-wrapper .popup-modal-template').clone(true); $(popup).find('.popup-modal-image').attr('src', banner.image_url).attr('alt', banner.title); $(popup).find('.popup-modal-link').attr('href', '/book/'+banner.book_id); if (banner.link) { $(popup).find('.popup-modal-link').attr('href', banner.link); } if (!isSameDomain(location.href, $(popup).find('.popup-modal-link').attr('href'))) { $(popup).find('.popup-modal-link').attr('target', '_blank'); } if (banner.label_csv) { $(popup).find('.popup-modal-label').text(banner.label_csv); } else { $(popup).find('.popup-modal-label').remove(); } $(popup).addClass('is-hide'); $(popup).attr('data-popup-id', banner.book_content_id); $('.popup-show-area').append(popup); var img = $(popup).find('.popup-modal-image'); if (img[0].complete) { $(popup).removeClass('is-hide'); $('body').addClass('popup-open'); } else { // 画像の読み込み完了時 img.on('load', function() { $(popup).removeClass('is-hide'); $('body').addClass('popup-open'); }); // 読み込みエラー時 img.on('error', function() { console.log('popup image not found..'); closePopup(popup); }); } }); if (Number($('body').attr('data-popup-cnt')) <= 0) { $('.popup-show-area').remove(); } } } }) } }); $(document).on('click', '.popup-modal-close-btn,.popup-modal-link', function(){ closePopup($(this).parents('.popup-modal-template')); if ($(this).attr('href')) { if ($(this).attr('target')) { $('.popup-show-area').css('display', 'none'); setTimeout(function(){ $('.popup-show-area').css('display', 'flex'); }, 500); window.open($(this).attr('href'), '_blank'); } else { location.href = $(this).attr('href'); } } }); $(document).on('click', '.popup-modal-template', function(event){ var that = this; if (!$(event.target).closest('.popup-modal').length) { closePopup($(this)); } }); function closePopup(template) { var popupId = $(template).attr('data-popup-id'); $('body').attr('data-popup-cnt', Number($('body').attr('data-popup-cnt')) - 1); var storedArray = []; var storedData = localStorage.getItem(storedKey); if (storedData) { storedArray = JSON.parse(storedData); } var result = storedArray.find(function(item) { return item.id === popupId; }); if (!result) { var popObj = { id: popupId, date: new Date() } storedArray.push(popObj); } localStorage.setItem(storedKey, JSON.stringify(storedArray)); $(template).remove(); if (Number($('body').attr('data-popup-cnt')) <= 0) { $('body').removeClass('popup-open'); $('.popup-show-area').remove(); } } function isSameDomain(url1, url2) { // 現在のページのベースURLを取得 const base = window.location.origin; // URLオブジェクトを使用してドメインを取得 const u1 = new URL(url1, base); // ベースURLを考慮して絶対URLを生成 const u2 = new URL(url2, base); // ドメインを比較 return u1.origin === u2.origin; } function escapeHTML(input) { return input; /* return input .replace(/&/g, "&") // & をエスケープ .replace(//g, ">") // > をエスケープ .replace(/"/g, """) // " をエスケープ .replace(/'/g, "'"); // ' をエスケープ */ }