「Widget:Custom map」の版間の差分
提供:メタファー リファンタジオ 攻略Wiki
ヘイグ運営用アカウント (トーク | 投稿記録) 編集の要約なし タグ: 差し戻し済み |
ヘイグ運営用アカウント (トーク | 投稿記録) 編集の要約なし タグ: 手動差し戻し |
||
508行目: | 508行目: | ||
536行目: | 515行目: | ||
var url = API_BASE_URL + '/index.php/' + geojsonPage; | var url = API_BASE_URL + '/index.php/' + geojsonPage; | ||
$.ajax({ | |||
type: "GET", | |||
url: url, | |||
dataType: "html", | |||
success: function(htmlContent) { | |||
try { | try { | ||
// console.log("HTML Content: ", htmlContent); // 取得したHTMLをコンソールに出力 | |||
var parser = new DOMParser(); | |||
var doc = parser.parseFromString(htmlContent, "text/html"); | |||
var scriptTag = doc.querySelector('#mw-content-text script'); | |||
if (!scriptTag) { | |||
throw new Error("Script tag not found"); | |||
} | |||
if (! | var scriptContent = scriptTag.textContent.trim(); | ||
throw new Error("GeoJSON data not found"); | var jsonDataMatch = scriptContent.match(/var GeoJson =(\{[\s\S]*\});/); | ||
if (!jsonDataMatch || jsonDataMatch.length < 2) { | |||
throw new Error("GeoJSON data not found in script tag"); | |||
} | |||
var geoJSONData = jsonDataMatch[1]; | |||
if (!geoJSONData) { | |||
throw new Error("GeoJSON data is empty"); | |||
} | } | ||
var parsedData = JSON.parse(geoJSONData); | |||
processGeoJSONData(parsedData); | processGeoJSONData(parsedData); | ||
} catch (error) { | } catch (error) { | ||
console.error("Error processing data:", error); | console.error("Error processing data:", error); | ||
// console.log("Raw HTML content:", htmlContent); | |||
// console.log("Extracted script content:", scriptContent); | |||
if (typeof geoJSONData !== 'undefined') { | |||
// console.log("Extracted GeoJSON data:", geoJSONData); | |||
} | |||
} | } | ||
} | }, | ||
error: function(xhr, status, error) { | |||
// console.error("Error loading data:", error); | |||
// console.log("XHR status:", status); | |||
// console.log("XHR response:", xhr.responseText); | |||
}); | } | ||
}); | |||
} | } | ||
709行目: | 684行目: | ||
function saveToWikiPage(geoJSONData) { | function saveToWikiPage(geoJSONData) { | ||
var formattedData = geoJSONData; | var formattedData = geoJSONData; | ||
$.ajax({ | |||
type: "POST", | |||
url: API_BASE_URL + '/api.php', | |||
data: { | |||
action: 'edit', | |||
title: '<!--{$geojson}-->', | |||
text: formattedData, | |||
token: mw.user.tokens.get('csrfToken'), | |||
format: 'json' | |||
}, | |||
success: function(response) { | |||
// console.log("Save response:", response); | |||
if (response.edit && response.edit.result === 'Success') { | if (response.edit && response.edit.result === 'Success') { | ||
alert('データは正常に保存されました'); | alert('データは正常に保存されました'); | ||
730行目: | 701行目: | ||
drawControl.remove(); | drawControl.remove(); | ||
editButton.state('enable-edit'); | editButton.state('enable-edit'); | ||
saveButton.remove(); | saveButton.remove(); // saveButtonを非表示にする | ||
setTimeout(function() { | setTimeout(function() { | ||
738行目: | 709行目: | ||
alert('Error saving data: ' + JSON.stringify(response)); | alert('Error saving data: ' + JSON.stringify(response)); | ||
} | } | ||
} | }, | ||
error: function(xhr, status, error) { | |||
console.error("Save error:", error); | console.error("Save error:", error); | ||
// console.log("XHR status:", status); | |||
// console.log("XHR response:", xhr.responseText); | |||
alert('Error saving data: ' + error); | |||
} | |||
}); | |||
} | } | ||
map.on(L.Draw.Event.CREATED, function (event) { | map.on(L.Draw.Event.CREATED, function (event) { | ||
var layer = event.layer; | var layer = event.layer; | ||
765行目: | 732行目: | ||
// ページ読み込み時にデータを読み込む | // ページ読み込み時にデータを読み込む | ||
$(document).ready(function() { | $(document).ready(function() { | ||
setTimeout(function() { | setTimeout(function() { | ||
map.invalidateSize(); | map.invalidateSize(); | ||
loadPinsFromWikiPage(); | |||
}, 500); // 少し長めの遅延を設定 | |||
}); | }); | ||
</script> | </script> | ||
</includeonly> | </includeonly> |