Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@
- `{{ }}` は既定で HTML エスケープする(lodash の `<%= %>` はしなかった)。テンプレートの誤りや存在しない値で地図の描画が止まらなくなった(存在しない値は空文字)
- 検出に当たらないまま表示が変わる場合が 1 つだけある: lodash の記法を含まず、`{{ }}`・`{% %}` を文字として書いていたテンプレートは、1.3 から Nunjucks として評価される

### Fixed
- `getMarker(id)` が、マーカーの描画と同じく祖先(POI のレイヤー → 地図 → アプリ)の `poiTemplate`・`iconTemplate` を当てた POI を返すようにした。これまでは格納しているデータをそのまま返していたため、`poiTemplate` で本文を作る POI を `@maplat/ui` の `openMarker()`・マーカー一覧・状態 URL(`om:`)から開くと本文が空になり、地図上のマーカーを押したときだけテンプレートが当たっていた(#150)。戻り値は `clickMarker` の detail と同じ形の複製で、格納している POI そのものではない。POI の書き換えは従来どおり `updateMarker` で行う

### Security
- 状態 URL や `localStorage` から来る地図 ID・層 ID の引き当てを、自分の鍵(`Object.hasOwn`)だけに限った。存在しない ID は、継承した名前でも今までの未知の ID と同じ扱いになり、起動や以後の地図の切り替えに影響しない。公開メソッドの `addMarker`・`clearMarker` に渡す層 ID も同じ
- 地図 ID は文字列だけを受ける(公開の型のとおり)。地図の設定の `mapID: 5` のような数値の ID を `changeMap(5)`・`mapInfo(5)`・`startFrom: 5` のように数値のまま渡しても引き当たらない。文字列(`"5"`)で渡す
Expand Down
9 changes: 7 additions & 2 deletions dist/element_contract.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ export type MaplatPoiMedia = string | {
* http/https だけを通す)。実装は読み込みで正規化する: 座標は lnglat にまとめる(lng/lat/longitude/latitude は
* 消す)・id と namespaceID を必ず付ける。マーカーの描画のたびに、祖先(POI のレイヤー → 地図 → アプリ)の
* テンプレートから icon・selectedIcon(iconTemplate / icon)と html・poiStyle(poiTemplate)を補った複製が
* クリックの detail になる。ここに無いキー(テンプレートが読む独自のキー等)もそのまま載る。
* クリックの detail になる(`getMarker` の戻り値も同じ複製)。ここに無いキー(テンプレートが読む独自のキー等)もそのまま載る。
*/
export interface MaplatPoi {
/** レイヤーの中の id(無ければ実装が `${レイヤーのキー}_${連番}` を付ける) */
Expand Down Expand Up @@ -443,7 +443,12 @@ export interface MaplatAppDelegatedMethods {
} | null>;
selectMarker: AnyFn;
unselectMarker: AnyFn;
/** POI の datum(id か namespaceID で引く)。見つからなければ undefined */
/**
* POI の datum(id か namespaceID で引く)。`clickMarker` の detail と同じ形: 祖先(POI のレイヤー → 地図。
* アプリの層ならレイヤー → アプリ)のテンプレートから icon・selectedIcon・html・poiStyle を補った複製を返す
* (格納している POI そのものではない。書き換えは `updateMarker`)。見つからなければ undefined。
* 他の層 A の実装(MaplatCorePro など)は追随中で、実体を返すことがある
*/
getMarker: (id: string) => MaplatPoi | undefined;
updateMarker: AnyFn;
addMarker: AnyFn;
Expand Down
Loading
Loading