Skip to content

GeoloniaMap が options 契約に反して container.dataset を読む箇所が2つ残存 #85

Description

@niryuu

概要

GeoloniaMap コンストラクタは「no DOM attribute parsing」(src/lib/geolonia-map.ts 冒頭のクラスコメント)として、GeoloniaMapOptions オブジェクトを受け取る設計になっている。しかし実装には コンテナの dataset(= HTML の data-* 属性)を直接読む箇所が 2 か所残存しており、「options だけで完結する lib」という契約と矛盾している。

これは embed 側で進めている「embed を maps-core 由来に置き換える」作業(geolonia/embed#491)および「embed の E2E を wrapper-only に縮約する」作業(geolonia/embed#493)の地ならしとして検出した。embed から GeoloniaMap(options) を呼ぶ形に移行すると、この 2 経路は options 経由で値を渡せず挙動が切れる

該当箇所

1. ポップアップ内容を data-popup-content から読む

src/lib/geolonia-map.ts

// Popup from container's inner HTML content
const content = container.dataset?.popupContent;
if (content) {
  const popup = new Popup({ offset: [0, -25] }).setHTML(content);
  marker.setPopup(popup);
  ...
}

GeoloniaMapOptionspopupContent 相当のフィールドが無いため、ポップアップ内容は DOM 経由でしか渡せない

2. SimpleStyleVector が data-lng / data-lat を判定に使う

src/lib/simplestyle-vector.ts

if (
  !container.dataset ||
  (!container.dataset.lng && !container.dataset.lat)
) {
  // auto fitBounds する/しないの分岐
}

auto-fitBounds するか否かの判定に、コンテナの data-lng / data-lat を直接参照している。これも options には無い。

期待・選択肢(デシジョンは maps-core 側で)

修正方針はこちらで決めてほしい。考えられる選択肢:

  • (A) options 化popupContent?: stringGeoloniaMapOptions に追加し、(2) の判定も center などの options から導出する。lib から DOM 依存を完全に除去する。
  • (B) DOM 契約として明文化 — 「これらは options ではなくコンテナ DOM を読む」ことを意図的仕様として型コメント/README に明記し、コンストラクタ冒頭の "no DOM attribute parsing" を実態に合わせて修正する。

どちらにせよ、embed 側(#491)が依存設計を確定する前に、この 2 経路の扱いが決まっていると移行がスムーズになる。

チェックリスト

  • (1) data-popup-content 依存の扱いを決定・対応
  • (2) SimpleStyleVector の data-lng / data-lat 依存の扱いを決定・対応
  • クラスコメントの "no DOM attribute parsing" を実態に整合

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions