let map;
let itinerary = [];
function initMap() {
map = L.map('map').setView([35.6895, 139.6917], 13);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
map.on('click', function(e) {
let marker = L.marker(e.latlng).addTo(map);
addLocationToItinerary(e.latlng);
});
}
function addLocationToItinerary(latlng) {
let item = {
lat: latlng.lat.toFixed(4),
lng: latlng.lng.toFixed(4),
date: '',
time: '',
memo: ''
};
itinerary.push(item);
updateItineraryDisplay();
}
function updateItineraryDisplay() {
let itineraryList = document.getElementById('itinerary');
itineraryList.innerHTML = '';
itinerary.forEach((item, index) => {
let li = document.createElement('li');
li.textContent = `地点: ${item.lat}, ${item.lng}`;
if (item.date) li.textContent += ` - ${item.date}`;
if (item.time) li.textContent += ` ${item.time}`;
if (item.memo) li.textContent += ` - ${item.memo}`;
let editButton = document.createElement('button');
editButton.textContent = '編集';
editButton.onclick = () => editItineraryItem(index);
li.appendChild(editButton);
itineraryList.appendChild(li);
});
}
function editItineraryItem(index) {
let item = itinerary[index];
item.date = prompt('日付を入力してください:', item.date);
item.time = prompt('時間を入力してください:', item.time);
item.memo = prompt('メモを入力してください:', item.memo);
updateItineraryDisplay();
}
document.getElementById('save-itinerary').addEventListener('click', function() {
localStorage.setItem('itinerary', JSON.stringify(itinerary));
alert('日程を保存しました');
});
document.getElementById('load-itinerary').addEventListener('click', function() {
let savedItinerary = localStorage.getItem('itinerary');
if (savedItinerary) {
itinerary = JSON.parse(savedItinerary);
updateItineraryDisplay();
alert('日程を読み込みました');
} else {
alert('保存された日程がありません');
}
});
window.onload = initMap;
Service Worker (service-worker.js)
javascript
const CACHE_NAME = 'trip-planner-v1';
const urlsToCache = [
'/',
'/index.html',
'/styles.css',
'/app.js',
'/icon.png'
];
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
if (response) {
return response;
}
return fetch(event.request);
}
)
);
});