(function () { 'use strict'; document.addEventListener('DOMContentLoaded', function () { var fileApi = window.TaberebaSettingsFile; var root = document.getElementById('tb-settings-file-app'); if (!fileApi || !root) { return; } var jsonText = document.getElementById('tb-settings-json-text'); var download = document.getElementById('tb-download-settings-json'); var file = document.getElementById('tb-settings-json-file'); var preview = document.getElementById('tb-settings-file-preview'); var summary = document.getElementById('tb-settings-file-preview-summary'); var apply = document.getElementById('tb-apply-settings-file'); var restoreArea = document.getElementById('tb-settings-file-backup-restore'); var restoreSummary = document.getElementById('tb-settings-file-backup-summary'); var restore = document.getElementById('tb-restore-settings-file-backup'); var reset = document.getElementById('tb-reset-browser-settings'); var message = document.getElementById('tb-settings-file-message'); var pending = null; function parseStored(key) { try { return fileApi.parse(window.localStorage.getItem(key) || ''); } catch (error) { return {success: false}; } } function refreshExport() { var current = parseStored(fileApi.settingsKey); jsonText.value = current.success ? JSON.stringify(current.settings, null, 2) : ''; } function refreshRestore() { var backup = parseStored(fileApi.backupKey); restoreArea.hidden = !backup.success; if (backup.success) { restoreSummary.textContent = 'サイト設定' + backup.summary.site_count + '件を、ファイル読込前の状態へ戻せます。'; } } download.addEventListener('click', function () { refreshExport(); if (!jsonText.value) { message.textContent = 'ダウンロードできる設定がありません。'; return; } var blob = new Blob([jsonText.value], {type: 'application/json;charset=utf-8'}); var url = URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = 'tabereba-settings-' + new Date().toISOString().slice(0, 10).replace(/-/g, '') + '.json'; document.body.appendChild(link); link.click(); link.remove(); URL.revokeObjectURL(url); message.textContent = '設定JSONをダウンロードしました。履歴とAPIキーは含まれていません。'; }); file.addEventListener('change', function () { pending = null; preview.hidden = true; var selected = file.files && file.files[0]; if (!selected || selected.size > fileApi.maxFileBytes) { message.textContent = '1 MiB以下の設定JSONファイルを選択してください。'; return; } var reader = new FileReader(); reader.onload = function () { pending = fileApi.parse(String(reader.result || '')); if (!pending.success) { message.textContent = 'タベレバ用の設定JSONを確認できませんでした。'; return; } summary.textContent = 'サイト設定' + pending.summary.site_count + '件、ASP設定あり' + pending.summary.affiliate_site_count + 'サイト(計' + pending.summary.affiliate_entry_count + '項目)を読み込みます。'; preview.hidden = false; message.textContent = '内容を確認してから読み込んでください。'; }; reader.onerror = function () { message.textContent = '設定ファイルを読み込めませんでした。'; }; reader.readAsText(selected, 'UTF-8'); }); apply.addEventListener('click', function () { if (!pending || !pending.success) { message.textContent = '先に設定ファイルを選択して内容を確認してください。'; return; } if (!window.confirm('現在の設定をバックアップし、確認した設定で置き換えます。よろしいですか?')) { return; } var result = fileApi.applyToStorage(window.localStorage, pending.settings); if (!result.success) { message.textContent = result.error === 'current_invalid' ? '現在の設定を確認できないため、読込みを中止しました。' : '設定を保存できませんでした。読込前バックアップは残しています。'; return; } window.location.reload(); }); restore.addEventListener('click', function () { if (!window.confirm('ファイル読込前のサイト設定へ戻します。よろしいですか?')) { return; } var result = fileApi.restoreFromStorage(window.localStorage); if (!result.success) { message.textContent = result.error === 'backup_invalid' ? '復元できる設定がありません。' : '設定を復元できませんでした。バックアップは残しています。'; return; } window.location.reload(); }); reset.addEventListener('click', function () { if (!window.confirm('タベレバがこのブラウザに保存した設定、履歴、バックアップを初期化します。旧Cookieは削除しません。よろしいですか?')) { return; } if (!fileApi.resetStorage(window.localStorage).success) { message.textContent = 'ブラウザ設定を初期化できませんでした。'; return; } window.location.reload(); }); refreshExport(); refreshRestore(); }); }());