「Widget:Custom map」の版間の差分

提供:ロマサガ2リメイク 攻略Wiki(ロマンシング サガ2 リベンジオブザセブン)
移動先:案内検索
編集の要約なし
タグ: 手動差し戻し
編集の要約なし
238行目: 238行目:
             popup.setContent(editableContent);
             popup.setContent(editableContent);
         } else {
         } else {
            // 編集モードでない場合は表示用のコンテンツを設定
// 編集モードでない場合は表示用のコンテンツを設定
            if (title === '' && content === '') {
if (title === '' && content === '') {
                layer.unbindPopup(); // タイトルと内容が空の場合はポップアップを表示しない
    layer.unbindPopup(); // タイトルと内容が空の場合はポップアップを表示しない
            } else {
} else {
                var displayContent = '<strong>' + title + '</strong><br>' + content;
    var displayContent = '<strong>' + title + '</strong><br>' + content;
                var renderedContent = renderMediaWikiContent(displayContent);
    renderMediaWikiContent(displayContent)
                popup.setContent(renderedContent);
        .then(function(renderedContent) {
            }
            popup.setContent(renderedContent);
         }
         })
    });
        .catch(function(error) {
 
            console.error("Render error:", error);
    // 既にポップアップが設定されている場合に備え、再設定
            // エラー時は未加工のコンテンツを表示
    if (!(title === '' && content === '')) {
            popup.setContent(displayContent);
        var displayContent = '<strong>' + title + '</strong><br>' + content;
         });
        var renderedContent = renderMediaWikiContent(displayContent);
         layer.bindPopup(renderedContent);
    }
}
}


// MediaWikiコンテンツのレンダリング
// MediaWikiコンテンツのレンダリング
function renderMediaWikiContent(content) {
function renderMediaWikiContent(content) {
     var renderedContent = '';
     return new Promise((resolve, reject) => {
    $.ajax({
        $.ajax({
        url: API_BASE_URL + '/api.php',
            url: API_BASE_URL + '/api.php',
        data: {
            data: {
            action: 'parse',
                action: 'parse',
            text: content,
                text: content,
            format: 'json'
                format: 'json'
        },
            },
        async: false,
            type: 'GET',
        success: function(data) {
            success: function(data) {
            renderedContent = data.parse.text['*'];
                if (data.parse && data.parse.text) {
            // レンダリング後の画像処理
                    var renderedContent = data.parse.text['*'];
            setTimeout(function() {
                    // レンダリング後の画像処理
                initLightGallery(renderedContent);
                    setTimeout(function() {
            }, 100);
                        initLightGallery(renderedContent);
        },
                    }, 100);
        error: function() {
                    resolve(renderedContent);
            console.error('Failed to render MediaWiki content');
                } else {
         }
                    reject(new Error('Invalid response format'));
                }
            },
            error: function(xhr, status, error) {
                console.error('Failed to render MediaWiki content:', error);
                reject(error);
            }
         });
     });
     });
    return renderedContent;
}
}


511行目: 511行目:
    
    
function loadPinsFromWikiPage() {
function loadPinsFromWikiPage() {
     var host = window.location.origin;
     getMwToken()
    var geojsonPage = "<!--{$geojson}-->";
        .then(function(token) {
    var url = API_BASE_URL + '/index.php/' + geojsonPage;
            var host = window.location.origin;
            var geojsonPage = "<!--{$geojson}-->";
            var url = API_BASE_URL + '/index.php/' + geojsonPage;


    $.ajax({
            return $.ajax({
        type: "GET",
                type: "GET",
        url: url,
                url: url,
        dataType: "html",
                dataType: "html",
         success: function(htmlContent) {
                headers: {
                    'Authorization': 'Bearer ' + token
                }
            });
        })
         .then(function(htmlContent) {
             try {
             try {
//                console.log("HTML Content: ", htmlContent); // 取得したHTMLをコンソールに出力
                 var parser = new DOMParser();
                 var parser = new DOMParser();
                 var doc = parser.parseFromString(htmlContent, "text/html");
                 var doc = parser.parseFromString(htmlContent, "text/html");
541行目: 547行目:
             } catch (error) {
             } catch (error) {
                 console.error("Error processing data:", error);
                 console.error("Error processing data:", error);
//                console.log("Raw HTML content:", htmlContent);
                 throw error;
//              console.log("Extracted script content:", scriptContent);
                 if (typeof geoJSONData !== 'undefined') {
//                  console.log("Extracted GeoJSON data:", geoJSONData);
                }
             }
             }
         },
         })
         error: function(xhr, status, error) {
         .catch(function(error) {
//          console.error("Error loading data:", error);
            console.error("Error loading data:", error);
//          console.log("XHR status:", status);
         });
//          console.log("XHR response:", xhr.responseText);
         }
    });
}
}


681行目: 680行目:




// トークンを取得する関数
function getMwToken() {
    return new Promise((resolve, reject) => {
        $.ajax({
            url: API_BASE_URL + '/api.php',
            data: {
                action: 'query',
                meta: 'tokens',
                type: 'csrf',
                format: 'json'
            },
            type: 'GET',
            success: function(response) {
                if (response.query && response.query.tokens && response.query.tokens.csrftoken) {
                    resolve(response.query.tokens.csrftoken);
                } else {
                    reject(new Error('Failed to get token'));
                }
            },
            error: function(xhr, status, error) {
                reject(error);
            }
        });
    });
}


function saveToWikiPage(geoJSONData) {
function saveToWikiPage(geoJSONData) {
     var formattedData = geoJSONData;
     var formattedData = geoJSONData;
     $.ajax({
      
        type: "POST",
    // 保存前に新しいトークンを取得
        url: API_BASE_URL + '/api.php',
    getMwToken()
        data: {
        .then(function(token) {
            action: 'edit',
            return $.ajax({
            title: '<!--{$geojson}-->',
                type: "POST",
            text: formattedData,
                url: API_BASE_URL + '/api.php',
            token: mw.user.tokens.get('csrfToken'),
                data: {
            format: 'json'
                    action: 'edit',
         },
                    title: '<!--{$geojson}-->',
         success: function(response) {
                    text: formattedData,
//            console.log("Save response:", response);
                    token: token,
                    format: 'json'
                }
            });
         })
         .then(function(response) {
             if (response.edit && response.edit.result === 'Success') {
             if (response.edit && response.edit.result === 'Success') {
                 alert('データは正常に保存されました');
                 alert('データは正常に保存されました');
701行目: 730行目:
                 drawControl.remove();
                 drawControl.remove();
                 editButton.state('enable-edit');
                 editButton.state('enable-edit');
                 saveButton.remove(); // saveButtonを非表示にする
                 saveButton.remove();
                  
                  
                 setTimeout(function() {
                 // 保存成功後、新しいトークンで再読み込み
                    loadPinsFromWikiPage();
                getMwToken()
                }, 1000);
                    .then(function(newToken) {
                        loadPinsFromWikiPage(newToken);
                    })
                    .catch(function(error) {
                        console.error("Failed to get token for reload:", error);
                    });
             } else {
             } else {
                 alert('Error saving data: ' + JSON.stringify(response));
                 throw new Error('保存に失敗しました');
             }
             }
         },
         })
         error: function(xhr, status, error) {
         .catch(function(error) {
             console.error("Save error:", error);
             console.error("Save error:", error);
//            console.log("XHR status:", status);
             alert('データの保存に失敗しました: ' + error.message);
//            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;
734行目: 769行目:
     setTimeout(function() {
     setTimeout(function() {
         map.invalidateSize();
         map.invalidateSize();
         loadPinsFromWikiPage();
         // 初期読み込み時にトークンを取得してからデータを読み込む
     }, 500); // 少し長めの遅延を設定
        getMwToken()
            .then(function(token) {
                console.log('Initial token obtained');
                loadPinsFromWikiPage(token);
            })
            .catch(function(error) {
                console.error("Failed to get initial token:", error);
                alert('データの読み込みに失敗しました。ページを再読み込みしてください。');
            });
     }, 500);
});
});
</script>
</script>


</includeonly>
</includeonly>

2024年11月9日 (土) 22:04時点における版