(function () { 'use strict'; var legacyCookieName = 'hotpepperlinkmaker'; document.addEventListener('DOMContentLoaded', function () { var migrationApi = window.TaberebaLegacyMigration; var root = document.getElementById('tb-legacy-cookie-app'); if (!migrationApi || !root) { return; } var input = document.getElementById('tb-legacy-cookie-text'); var detectMessage = document.getElementById('tb-legacy-detect-message'); var loadCookieButton = document.getElementById('tb-load-legacy-cookie'); var previewButton = document.getElementById('tb-preview-legacy-cookie'); var applyButton = document.getElementById('tb-apply-legacy-cookie'); var preview = document.getElementById('tb-legacy-cookie-preview'); var previewList = document.getElementById('tb-legacy-cookie-preview-list'); var warning = document.getElementById('tb-legacy-cookie-warning'); var restoreArea = document.getElementById('tb-legacy-restore-area'); var restoreButton = document.getElementById('tb-restore-legacy-backup'); var message = document.getElementById('tb-legacy-cookie-message'); var pending = null; function showMessage(value) { message.textContent = value; } function updateRestoreArea() { var backup = ''; try { backup = window.localStorage.getItem(migrationApi.backupKey) || ''; } catch (error) { backup = ''; } restoreArea.hidden = !migrationApi.validSettingsJson(backup); } function detectedCookieValue() { try { return migrationApi.findCookie(document.cookie, legacyCookieName); } catch (error) { return ''; } } function updateDetection() { var detected = detectedCookieValue() !== ''; loadCookieButton.disabled = !detected; detectMessage.textContent = detected ? '旧タベレバの設定Cookieを検出しました。内容を確認してから移行できます。' : '旧Cookieは自動検出できませんでした。必要な場合は下の欄へ貼り付けてください。'; } function failureMessage(error) { if (error === 'duplicate_key') { return '同じ項目が複数あります。自動判断せず、移行を中止しました。'; } if (error === 'unsupported_key') { return '設定Cookie以外の項目が含まれています。hotpepperlinkmaker の内容だけを貼り付けてください。'; } return '旧データを解析できませんでした。sn・hts・htpの区切りと、最大5サイトであることを確認してください。'; } function renderPreview(result) { previewList.textContent = ''; result.settings.sites.forEach(function (site, index) { var card = document.createElement('div'); card.className = 'tb-legacy-preview-card'; var title = document.createElement('strong'); title.textContent = site.site_name || '名称未設定サイト' + (index + 1); var details = document.createElement('span'); var incomplete = site.migration_info.incomplete_valuecommerce_pairs || []; details.textContent = site.hotpepper_valuecommerce_html ? 'Hot PepperのValueCommerce設定:移行予定(移行後に要確認)' : (incomplete.indexOf('hotpepper') !== -1 ? 'Hot PepperのValueCommerce設定:不整合のため移行しません' : 'Hot PepperのValueCommerce設定:なし'); card.appendChild(title); card.appendChild(details); previewList.appendChild(card); }); warning.hidden = !result.summary.count_mismatch && result.summary.incomplete_hotpepper_count === 0; if (!warning.hidden) { warning.textContent = result.summary.count_mismatch ? 'サイト名とsid・pidの件数が一致しないため、ASP設定は移行しません。サイト名だけを移行できます。' : 'sid・pidの片方不足または形式不正があるため、該当ASP設定は移行しません。'; } preview.hidden = false; showMessage(result.summary.site_count + 'サイトを検出しました。内容を確認してください。'); } function previewValue(value) { pending = migrationApi.convert(value); if (!pending.success) { preview.hidden = true; showMessage(failureMessage(pending.error)); return; } renderPreview(pending); } loadCookieButton.addEventListener('click', function () { var value = detectedCookieValue(); if (value === '') { showMessage('旧Cookieを確認できませんでした。手動貼り付けをご利用ください。'); updateDetection(); return; } previewValue(value); }); previewButton.addEventListener('click', function () { previewValue(input.value); }); input.addEventListener('input', function () { pending = null; preview.hidden = true; showMessage('入力内容を変更しました。もう一度、移行内容を確認してください。'); }); applyButton.addEventListener('click', function () { if (!pending || !pending.success) { showMessage('先に移行内容を確認してください。'); return; } if (!window.confirm('旧タベレバのサイト設定' + pending.summary.site_count + '件を読み込みます。現在の設定は1世代バックアップされます。よろしいですか?')) { return; } var applied = migrationApi.applyToStorage(window.localStorage, pending.settings); if (!applied.success) { showMessage(applied.error === 'current_invalid' ? '現在の設定を確認できないため、移行を中止しました。' : '設定を保存できませんでした。移行前バックアップと確認内容は残しています。'); return; } window.location.reload(); }); restoreButton.addEventListener('click', function () { if (!window.confirm('旧設定移行前のサイト設定へ戻します。よろしいですか?')) { return; } var restored = migrationApi.restoreFromStorage(window.localStorage); if (!restored.success) { showMessage(restored.error === 'backup_invalid' ? '復元できる設定がありません。' : '移行前の設定を復元できませんでした。バックアップは残しています。'); return; } window.location.reload(); }); updateRestoreArea(); updateDetection(); }); }());