$(function() { var cookieNameFavorite = 'favorite_onsen_ids'; var cookieNameHistory = 'history_onsen_ids'; var cookieExpiresOnsenIds = 365; // お気に入り、履歴cookie有効期限 var favoriteMax = 20; // お気に入り最大件数 var historyMax = 20; // 履歴最大件数 // Cookieに温泉IDがあるかを判定 var hasOnsenId = function(targetCookie, onsenId) { var result = false; var targetCookieValue = $.cookie(targetCookie); if (targetCookieValue && onsenId) { result = (targetCookieValue.indexOf(onsenId) >= 0); } return result; } // Cookieから温泉ID削除 var removeOnsenId = function(targetCookie, onsenId, expires) { var targetCookieValue = $.cookie(targetCookie); if (targetCookieValue && onsenId) { $.cookie(targetCookie, targetCookieValue.replace(new RegExp('(,|)' + onsenId), '').replace(/^,/, ''), { path: '/', expires: expires }); } } // Cookieへ温泉ID追加 var addOnsenId = function(targetCookie, onsenId, expires, max) { if (onsenId) { // 対象cookieを一度削除 removeOnsenId(targetCookie, onsenId, cookieExpiresOnsenIds); var targetCookieValue = $.cookie(targetCookie); // お気に入り if (targetCookie === cookieNameFavorite) { // 末尾に追加 targetCookieValue = ((targetCookieValue) ? targetCookieValue + ',' : '') + onsenId; // 上限超えた場合の制御、追加不可 if (targetCookieValue.split(',').length > favoriteMax) { alert('お気に入りに登録できるのは' + favoriteMax + '件までです。'); return false; } } // 最近の履歴 else if (targetCookie === cookieNameHistory) { // 先頭に追加 targetCookieValue = onsenId + ((targetCookieValue) ? ',' + targetCookieValue : ''); if (targetCookieValue.split(',').length > historyMax) { // 末尾からID除去 targetCookieValue = targetCookieValue.replace(new RegExp('(,|)[^,]+$'), ''); } } // cookie値更新 $.cookie(targetCookie, targetCookieValue, { path: '/', expires: expires }); return true; } return false; } // 履歴追加 $('[data-add-history]').each(function(e) { var onsenId = $(this).attr('data-id'); if (onsenId) { addOnsenId(cookieNameHistory, onsenId, cookieExpiresOnsenIds, historyMax); } }); // お気に入り登録ボタン $('[data-add-favorite]').each(function(e) { if (hasOnsenId(cookieNameFavorite, $(this).attr('data-id'))) { $(this).addClass('saved').text('お気に入りに登録済み'); } }); $(document).on('click', '[data-add-favorite]', function(e) { var onsenId = $(this).attr('data-id'); if (onsenId) { // お気に入り登録 if (!$(this).hasClass('saved')) { if (!addOnsenId(cookieNameFavorite, onsenId, cookieExpiresOnsenIds, favoriteMax)) { e.preventDefault(); e.stopImmediatePropagation(); // 以降の他イベントハンドらも止める return false; } } // お気に入りから削除 else { removeOnsenId(cookieNameFavorite, onsenId, cookieExpiresOnsenIds); } } return false; }); // お気に入りから削除ボタン $(document).on('click', '[data-remove-favorite]', function(e) { var dataId = $(this).attr('data-id'); if (dataId) { removeOnsenId(cookieNameFavorite, dataId, cookieExpiresOnsenIds); } return false; }); });