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

提供:メタファー リファンタジオ 攻略Wiki
移動先:案内検索
編集の要約なし
編集の要約なし
21行目: 21行目:




// グローバル変数の定義
let map;
let map;
var drawnItems;
let drawnItems;
var drawControl;
let drawControl;
var editMode = false;
let editMode = false;
 
// APIベースURLを定数として定義
// APIベースURLを定数として定義
const API_BASE_URL = 'https://prd-h1g-elb-2067013247.ap-northeast-1.elb.amazonaws.com/metaphor_refantazio';
const API_BASE_URL = 'https://prd-h1g-elb-2067013247.ap-northeast-1.elb.amazonaws.com/metaphor_refantazio';


window.savePopupContent = savePopupContent;
// API_BASE_URLの保護
Object.defineProperty(window, 'API_BASE_URL', {
    value: API_BASE_URL,
    writable: false,
    configurable: false
});


// 表示する画像
// マップ初期化前のクリーンアップ
var imageBase = {
function cleanupBeforeInit() {
  url: '<!--{$img}-->',
    if (window.map) {
  width: <!--{$imgwidth}-->,         // 画像のサイズ
        map.remove();
  height: <!--{$imgheight}-->
        window.map = null;
};
    }
    if (window.drawnItems) {
        drawnItems.clearLayers();
        window.drawnItems = null;
    }
    ['editControl', 'drawControl', 'iconDefinitions'].forEach(varName => {
        if (window[varName]) {
            window[varName] = null;
        }
    });
}
 
// マップの初期化
function initializeMap() {
    // クリーンアップ
    cleanupBeforeInit();
   
    // 画像の設定
    const imageBase = {
        url: '<!--{$img}-->',
        width: <!--{$imgwidth}-->,
        height: <!--{$imgheight}-->
    };
 
    // 境界の設定
    const imageBounds = L.latLngBounds(
        [0, 0],
        [imageBase.height, imageBase.width]
    );


// 地図初期化
    // マップインスタンスの作成
var imageBounds = L.latLngBounds(
    map = L.map('map', {
  [0, 0],
        crs: L.CRS.Simple,
  [imageBase.height, imageBase.width],
        maxBounds: imageBounds.pad(0.5),
 
        minZoom: <!--{$minzoom}-->,
);
        maxZoom: <!--{$maxzoom}-->
    });


map = L.map('map', {
    map.fitBounds(imageBounds);
  crs: L.CRS.Simple,
    L.imageOverlay(imageBase.url, imageBounds, {
  maxBounds: imageBounds.pad(0.5),
        attribution: '<a href="https://h1g.jp/" target="_blank">【ヘイグ】</a>'
  minZoom: <!--{$minzoom}-->, // minZoomを0に設定
    }).addTo(map);
  maxZoom: <!--{$maxzoom}-->,


});
    // drawnItemsの初期化(一度だけ)
map.fitBounds(imageBounds);
    drawnItems = new L.FeatureGroup();
L.imageOverlay(imageBase.url, imageBounds,{
    map.addLayer(drawnItems);
  attribution: '<a href="https://h1g.jp/" target="_blank">【ヘイグ】</a>'
}).addTo(map);


var drawnItems = new L.FeatureGroup();
    return map;
map.addLayer(drawnItems);
}




771行目: 804行目:
// ページ読み込み時にデータを読み込む
// ページ読み込み時にデータを読み込む
$(document).ready(function() {
$(document).ready(function() {
    // マップの初期化
    map = initializeMap();
   
    // APIリクエストのインターセプター
    const originalAjax = $.ajax;
    $.ajax = function(settings) {
        if (typeof settings.url === 'string') {
            const requestUrl = settings.url.startsWith('http') ?
                settings.url :
                API_BASE_URL + settings.url;
           
            if (!requestUrl.includes(API_BASE_URL.split('/').pop())) {
                console.warn('Incorrect Wiki URL detected, correcting...');
                settings.url = settings.url.replace(
                    /\/[^\/]+\/api\.php/,
                    '/' + API_BASE_URL.split('/').pop() + '/api.php'
                );
            }
        }
        return originalAjax.apply(this, arguments);
    };
    // データの読み込み
     setTimeout(function() {
     setTimeout(function() {
         map.invalidateSize();
         map.invalidateSize();
        // 初期読み込み時にトークンを取得してからデータを読み込む
         getMwToken()
         getMwToken()
             .then(function(token) {
             .then(function(token) {

2024年11月10日 (日) 16:55時点における版