@ablogcms/lib 3.2.28-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/a-table/index.d.ts +10 -0
- package/dist/a-table/index.mjs +48 -0
- package/dist/a-table/index.mjs.map +1 -0
- package/dist/acms.d.ts +8 -0
- package/dist/acms.mjs +1 -0
- package/dist/acms.mjs.map +1 -0
- package/dist/chunk-AMZYQ4DG.mjs +344 -0
- package/dist/chunk-AMZYQ4DG.mjs.map +1 -0
- package/dist/chunk-W7TT2YZB.mjs +271 -0
- package/dist/chunk-W7TT2YZB.mjs.map +1 -0
- package/dist/chunk-ZPZHEKTI.mjs +20 -0
- package/dist/chunk-ZPZHEKTI.mjs.map +1 -0
- package/dist/command.d.ts +5 -0
- package/dist/command.mjs +63 -0
- package/dist/command.mjs.map +1 -0
- package/dist/create-pdf.d.ts +1 -0
- package/dist/create-pdf.mjs +27 -0
- package/dist/create-pdf.mjs.map +1 -0
- package/dist/events.d.ts +210 -0
- package/dist/flatpicker/date-picker.d.ts +6 -0
- package/dist/flatpicker/date-picker.mjs +28 -0
- package/dist/flatpicker/date-picker.mjs.map +1 -0
- package/dist/flatpicker/time-picker.d.ts +6 -0
- package/dist/flatpicker/time-picker.mjs +28 -0
- package/dist/flatpicker/time-picker.mjs.map +1 -0
- package/dist/geolocation.d.ts +1 -0
- package/dist/geolocation.mjs +30 -0
- package/dist/geolocation.mjs.map +1 -0
- package/dist/google-maps/google-maps.d.ts +6 -0
- package/dist/google-maps/google-maps.mjs +105 -0
- package/dist/google-maps/google-maps.mjs.map +1 -0
- package/dist/google-maps/loader.d.ts +9 -0
- package/dist/google-maps/loader.mjs +7 -0
- package/dist/google-maps/loader.mjs.map +1 -0
- package/dist/google-maps/picker/google-maps-picker.d.ts +72 -0
- package/dist/google-maps/picker/index.d.ts +5 -0
- package/dist/google-maps/picker/index.mjs +483 -0
- package/dist/google-maps/picker/index.mjs.map +1 -0
- package/dist/google-maps/street-view.d.ts +2 -0
- package/dist/google-maps/street-view.mjs +25 -0
- package/dist/google-maps/street-view.mjs.map +1 -0
- package/dist/htmx/geolocation.d.ts +1 -0
- package/dist/htmx/geolocation.mjs +40 -0
- package/dist/htmx/geolocation.mjs.map +1 -0
- package/dist/icons.d.ts +2 -0
- package/dist/icons.mjs +181 -0
- package/dist/icons.mjs.map +1 -0
- package/dist/lazy-load/index.d.ts +2 -0
- package/dist/lazy-load/index.mjs +21 -0
- package/dist/lazy-load/index.mjs.map +1 -0
- package/dist/lite-editor/index.d.ts +87 -0
- package/dist/lite-editor/index.mjs +274 -0
- package/dist/lite-editor/index.mjs.map +1 -0
- package/dist/lite-editor-field/index.d.ts +8 -0
- package/dist/lite-editor-field/index.mjs +18 -0
- package/dist/lite-editor-field/index.mjs.map +1 -0
- package/dist/loader/index.d.ts +2 -0
- package/dist/loader/index.mjs +262 -0
- package/dist/loader/index.mjs.map +1 -0
- package/dist/loader/loader.d.ts +29 -0
- package/dist/loader/sync-loader.d.ts +104 -0
- package/dist/open-street-map/open-street-map.d.ts +2 -0
- package/dist/open-street-map/open-street-map.mjs +60 -0
- package/dist/open-street-map/open-street-map.mjs.map +1 -0
- package/dist/open-street-map/picker/index.d.ts +6 -0
- package/dist/open-street-map/picker/index.mjs +50 -0
- package/dist/open-street-map/picker/index.mjs.map +1 -0
- package/dist/open-street-map/picker/open-street-map-picker.d.ts +55 -0
- package/dist/open-street-map/picker/open-street-map-picker.mjs +7 -0
- package/dist/open-street-map/picker/open-street-map-picker.mjs.map +1 -0
- package/dist/pdf2image.d.ts +21 -0
- package/dist/pdf2image.mjs +115 -0
- package/dist/pdf2image.mjs.map +1 -0
- package/dist/polyfill/index.d.ts +1 -0
- package/dist/polyfill/index.mjs +40 -0
- package/dist/polyfill/index.mjs.map +1 -0
- package/dist/read-files.d.ts +14 -0
- package/dist/read-files.mjs +62 -0
- package/dist/read-files.mjs.map +1 -0
- package/dist/resize-image/resize-image.d.ts +71 -0
- package/dist/resize-image/resize-image.mjs +308 -0
- package/dist/resize-image/resize-image.mjs.map +1 -0
- package/dist/resize-image/util.d.ts +134 -0
- package/dist/resize-image/util.mjs +7 -0
- package/dist/resize-image/util.mjs.map +1 -0
- package/dist/select2/index.d.ts +1 -0
- package/dist/select2/index.mjs +33 -0
- package/dist/select2/index.mjs.map +1 -0
- package/dist/trumbowyg.d.ts +12 -0
- package/dist/wysiwyg.d.ts +2 -0
- package/dist/wysiwyg.mjs +21 -0
- package/dist/wysiwyg.mjs.map +1 -0
- package/dist/zxcvbn/index.d.ts +2 -0
- package/dist/zxcvbn/index.mjs +35 -0
- package/dist/zxcvbn/index.mjs.map +1 -0
- package/package.json +203 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
import {
|
|
2
|
+
loader_default
|
|
3
|
+
} from "../../chunk-ZPZHEKTI.mjs";
|
|
4
|
+
|
|
5
|
+
// src/google-maps/picker/google-maps-picker.ts
|
|
6
|
+
var defaultOptions = {
|
|
7
|
+
latInput: '.js-map_editable-lat, input[name^="map_lat_"]',
|
|
8
|
+
lngInput: '.js-map_editable-lng, input[name^="map_lng_"]',
|
|
9
|
+
zoomInput: '.js-map_editable-zoom, input[name^="map_zoom_"]',
|
|
10
|
+
pitchInput: '.js-map_editable-pitch, input[name^="map_view_pitch_"]',
|
|
11
|
+
zoomViewInput: '.js-map_editable-zoom-view, input[name^="map_view_zoom_"]',
|
|
12
|
+
headingInput: '.js-map_editable-heading, input[name^="map_view_heading_"]',
|
|
13
|
+
modeSwitcher: '.js-map_editable-activate, input[type="checkbox"][name^="map_view_activate_"]',
|
|
14
|
+
searchInput: ".js-editable_map-search_text",
|
|
15
|
+
searchButton: ".js-editable_map-search_button",
|
|
16
|
+
mapRoot: ".js-map_editable-container",
|
|
17
|
+
apiKey: ACMS.Config.googleApiKey
|
|
18
|
+
};
|
|
19
|
+
var GoogleMapsPicker = class {
|
|
20
|
+
options;
|
|
21
|
+
google = null;
|
|
22
|
+
googleMap = null;
|
|
23
|
+
googleMapMarker = null;
|
|
24
|
+
// 状態管理
|
|
25
|
+
value;
|
|
26
|
+
// DOM要素
|
|
27
|
+
container;
|
|
28
|
+
mapRoot;
|
|
29
|
+
latInput;
|
|
30
|
+
lngInput;
|
|
31
|
+
zoomInput;
|
|
32
|
+
pitchInput = null;
|
|
33
|
+
zoomViewInput = null;
|
|
34
|
+
headingInput = null;
|
|
35
|
+
modeSwitcher = null;
|
|
36
|
+
searchInput = null;
|
|
37
|
+
searchButton = null;
|
|
38
|
+
// イベントリスナー管理
|
|
39
|
+
eventRegistry = /* @__PURE__ */ new Map();
|
|
40
|
+
constructor(elementOrSelector, options) {
|
|
41
|
+
const container = typeof elementOrSelector === "string" ? document.querySelector(elementOrSelector) : elementOrSelector;
|
|
42
|
+
if (!container) {
|
|
43
|
+
throw new Error("Container element not found");
|
|
44
|
+
}
|
|
45
|
+
this.container = container;
|
|
46
|
+
this.options = {
|
|
47
|
+
...defaultOptions,
|
|
48
|
+
...options
|
|
49
|
+
};
|
|
50
|
+
const latInput = this.getInputElement(this.options.latInput, this.container);
|
|
51
|
+
const lngInput = this.getInputElement(this.options.lngInput, this.container);
|
|
52
|
+
const zoomInput = this.getInputElement(this.options.zoomInput, this.container);
|
|
53
|
+
const pitchInput = this.getInputElement(this.options.pitchInput, this.container);
|
|
54
|
+
const zoomViewInput = this.getInputElement(this.options.zoomViewInput, this.container);
|
|
55
|
+
const headingInput = this.getInputElement(this.options.headingInput, this.container);
|
|
56
|
+
const modeSwitcher = this.getInputElement(this.options.modeSwitcher, this.container);
|
|
57
|
+
const searchInput = this.getInputElement(this.options.searchInput, this.container);
|
|
58
|
+
const searchButton = this.getButtonElement(this.options.searchButton, this.container);
|
|
59
|
+
const mapRoot = this.getElement(this.options.mapRoot, this.container);
|
|
60
|
+
if (!latInput) {
|
|
61
|
+
throw new Error("Latitude input element is required");
|
|
62
|
+
}
|
|
63
|
+
if (!lngInput) {
|
|
64
|
+
throw new Error("Longitude input element is required");
|
|
65
|
+
}
|
|
66
|
+
if (!zoomInput) {
|
|
67
|
+
throw new Error("Zoom input element is required");
|
|
68
|
+
}
|
|
69
|
+
if (!mapRoot) {
|
|
70
|
+
throw new Error("Map root element is required");
|
|
71
|
+
}
|
|
72
|
+
this.latInput = latInput;
|
|
73
|
+
this.lngInput = lngInput;
|
|
74
|
+
this.zoomInput = zoomInput;
|
|
75
|
+
this.pitchInput = pitchInput;
|
|
76
|
+
this.zoomViewInput = zoomViewInput;
|
|
77
|
+
this.headingInput = headingInput;
|
|
78
|
+
this.modeSwitcher = modeSwitcher;
|
|
79
|
+
this.searchInput = searchInput;
|
|
80
|
+
this.searchButton = searchButton;
|
|
81
|
+
this.mapRoot = mapRoot;
|
|
82
|
+
this.value = {
|
|
83
|
+
type: "ROADMAP",
|
|
84
|
+
lat: 0,
|
|
85
|
+
lng: 0,
|
|
86
|
+
zoom: 0,
|
|
87
|
+
streetView: {
|
|
88
|
+
heading: 0,
|
|
89
|
+
pitch: 0,
|
|
90
|
+
zoomView: 0
|
|
91
|
+
},
|
|
92
|
+
...this.options.defaultValue
|
|
93
|
+
};
|
|
94
|
+
if (mapRoot instanceof HTMLImageElement) {
|
|
95
|
+
const div = document.createElement("div");
|
|
96
|
+
div.className = mapRoot.className;
|
|
97
|
+
div.style.cssText = getComputedStyle(mapRoot).cssText;
|
|
98
|
+
div.style.width = `${mapRoot.width}px`;
|
|
99
|
+
div.style.height = `${mapRoot.height}px`;
|
|
100
|
+
mapRoot.parentNode?.replaceChild(div, mapRoot);
|
|
101
|
+
this.mapRoot = div;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async init() {
|
|
105
|
+
if (this.google) {
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
this.google = await loader_default(this.options.apiKey);
|
|
110
|
+
this.setValue();
|
|
111
|
+
this.setupEventListeners();
|
|
112
|
+
this.createMap(this.options.mapOptions);
|
|
113
|
+
this.toggleStreetView();
|
|
114
|
+
return this;
|
|
115
|
+
} catch (error) {
|
|
116
|
+
throw new Error(`Failed to initialize Google Maps: ${error}`, { cause: error });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// DOM要素取得のヘルパーメソッド
|
|
120
|
+
getElement(elementOrSelector, context = document.body) {
|
|
121
|
+
if (!elementOrSelector) return null;
|
|
122
|
+
if (typeof elementOrSelector === "string") {
|
|
123
|
+
if (context.matches && context.matches(elementOrSelector)) {
|
|
124
|
+
return context;
|
|
125
|
+
}
|
|
126
|
+
return context.querySelector(elementOrSelector);
|
|
127
|
+
}
|
|
128
|
+
return elementOrSelector;
|
|
129
|
+
}
|
|
130
|
+
getInputElement(elementOrSelector, context = document.body) {
|
|
131
|
+
const element = this.getElement(elementOrSelector, context);
|
|
132
|
+
return element instanceof HTMLInputElement ? element : null;
|
|
133
|
+
}
|
|
134
|
+
getButtonElement(elementOrSelector, context = document.body) {
|
|
135
|
+
const element = this.getElement(elementOrSelector, context);
|
|
136
|
+
return element instanceof HTMLButtonElement ? element : null;
|
|
137
|
+
}
|
|
138
|
+
setupEventListeners() {
|
|
139
|
+
const handleLatLngChange = () => {
|
|
140
|
+
if (!this.google) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
this.setValue();
|
|
144
|
+
const center = new this.google.maps.LatLng(this.value.lat, this.value.lng);
|
|
145
|
+
if (this.googleMap) {
|
|
146
|
+
this.googleMap.panTo(center);
|
|
147
|
+
}
|
|
148
|
+
if (this.googleMapMarker) {
|
|
149
|
+
this.googleMapMarker.setPosition(center);
|
|
150
|
+
}
|
|
151
|
+
this.emitChange();
|
|
152
|
+
};
|
|
153
|
+
this.latInput.addEventListener("change", handleLatLngChange);
|
|
154
|
+
this.lngInput.addEventListener("change", handleLatLngChange);
|
|
155
|
+
this.eventRegistry.set(this.latInput, [{ type: "change", listener: handleLatLngChange }]);
|
|
156
|
+
this.eventRegistry.set(this.lngInput, [{ type: "change", listener: handleLatLngChange }]);
|
|
157
|
+
if (this.zoomInput) {
|
|
158
|
+
const handleZoomChange = () => {
|
|
159
|
+
if (this.googleMap) {
|
|
160
|
+
this.setValue();
|
|
161
|
+
this.googleMap.setZoom(this.value.zoom);
|
|
162
|
+
this.emitChange();
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
this.zoomInput.addEventListener("change", handleZoomChange);
|
|
166
|
+
this.eventRegistry.set(this.zoomInput, [{ type: "change", listener: handleZoomChange }]);
|
|
167
|
+
}
|
|
168
|
+
if (this.modeSwitcher) {
|
|
169
|
+
const handleModeChange = () => {
|
|
170
|
+
this.toggleStreetView();
|
|
171
|
+
this.emitChange();
|
|
172
|
+
};
|
|
173
|
+
this.modeSwitcher.addEventListener("change", handleModeChange);
|
|
174
|
+
this.eventRegistry.set(this.modeSwitcher, [{ type: "change", listener: handleModeChange }]);
|
|
175
|
+
}
|
|
176
|
+
this.setupSearch();
|
|
177
|
+
}
|
|
178
|
+
createMap(options = {}) {
|
|
179
|
+
if (!this.google) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const div = document.createElement("div");
|
|
183
|
+
div.style.height = "100%";
|
|
184
|
+
this.mapRoot.replaceChildren(div);
|
|
185
|
+
const center = new this.google.maps.LatLng(this.value.lat, this.value.lng);
|
|
186
|
+
this.googleMap = new this.google.maps.Map(div, {
|
|
187
|
+
zoom: this.value.zoom,
|
|
188
|
+
center,
|
|
189
|
+
mapTypeId: this.google.maps.MapTypeId.ROADMAP,
|
|
190
|
+
gestureHandling: "cooperative",
|
|
191
|
+
...options
|
|
192
|
+
});
|
|
193
|
+
this.registerMapEvents();
|
|
194
|
+
this.createMarker();
|
|
195
|
+
}
|
|
196
|
+
registerMapEvents() {
|
|
197
|
+
if (!this.google || !this.googleMap) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (this.zoomInput) {
|
|
201
|
+
this.google.maps.event.addListener(this.googleMap, "zoom_changed", () => {
|
|
202
|
+
if (this.googleMap && this.zoomInput) {
|
|
203
|
+
this.zoomInput.value = this.googleMap.getZoom().toString();
|
|
204
|
+
this.setValue();
|
|
205
|
+
this.emitChange();
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
unregisterMapEvents() {
|
|
211
|
+
if (!this.google || !this.googleMap) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
this.google.maps.event.clearInstanceListeners(this.googleMap);
|
|
215
|
+
}
|
|
216
|
+
createMarker() {
|
|
217
|
+
if (!this.google || !this.googleMap) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const center = this.googleMap.getCenter();
|
|
221
|
+
this.googleMapMarker = new this.google.maps.Marker({
|
|
222
|
+
position: center,
|
|
223
|
+
map: this.googleMap,
|
|
224
|
+
draggable: true
|
|
225
|
+
});
|
|
226
|
+
this.google.maps.event.addListener(this.googleMapMarker, "dragend", (event) => {
|
|
227
|
+
this.setPosition(event.latLng);
|
|
228
|
+
this.emitChange();
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
createPanorama() {
|
|
232
|
+
if (!this.google || !this.googleMap) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
const center = this.googleMap.getCenter();
|
|
236
|
+
const config = {
|
|
237
|
+
position: {
|
|
238
|
+
lat: center.lat(),
|
|
239
|
+
lng: center.lng()
|
|
240
|
+
},
|
|
241
|
+
pov: {
|
|
242
|
+
heading: this.value.streetView.heading,
|
|
243
|
+
pitch: this.value.streetView.pitch
|
|
244
|
+
},
|
|
245
|
+
zoom: this.value.streetView.zoomView
|
|
246
|
+
};
|
|
247
|
+
const mapDiv = this.googleMap.getDiv();
|
|
248
|
+
const panorama = new this.google.maps.StreetViewPanorama(mapDiv, config);
|
|
249
|
+
return panorama;
|
|
250
|
+
}
|
|
251
|
+
registerStreetViewEvents() {
|
|
252
|
+
if (!this.google || !this.googleMap) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const panorama = this.googleMap.getStreetView();
|
|
256
|
+
this.google.maps.event.addListener(panorama, "pov_changed", () => {
|
|
257
|
+
this.updateStreetViewInputs();
|
|
258
|
+
this.emitChange();
|
|
259
|
+
});
|
|
260
|
+
this.google.maps.event.addListener(panorama, "position_changed", () => {
|
|
261
|
+
const pos = panorama.getPosition();
|
|
262
|
+
this.setPosition(pos);
|
|
263
|
+
this.emitChange();
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
unregisterStreetViewEvents() {
|
|
267
|
+
if (!this.google || !this.googleMap) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
const panorama = this.googleMap.getStreetView();
|
|
271
|
+
this.google.maps.event.clearInstanceListeners(panorama);
|
|
272
|
+
}
|
|
273
|
+
updateStreetViewInputs() {
|
|
274
|
+
if (!this.googleMap) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const streetView = this.googleMap.getStreetView();
|
|
278
|
+
const pov = streetView.getPov();
|
|
279
|
+
if (pov.pitch !== void 0 && this.pitchInput) {
|
|
280
|
+
this.pitchInput.value = pov.pitch.toString();
|
|
281
|
+
}
|
|
282
|
+
if (pov.heading !== void 0 && this.headingInput) {
|
|
283
|
+
this.headingInput.value = pov.heading.toString();
|
|
284
|
+
}
|
|
285
|
+
if (this.zoomViewInput) {
|
|
286
|
+
this.zoomViewInput.value = streetView.getZoom().toString();
|
|
287
|
+
}
|
|
288
|
+
this.setValue();
|
|
289
|
+
}
|
|
290
|
+
toggleStreetView() {
|
|
291
|
+
const isStreetViewMode = this.modeSwitcher?.checked || false;
|
|
292
|
+
if (isStreetViewMode) {
|
|
293
|
+
this.activateStreetView();
|
|
294
|
+
} else {
|
|
295
|
+
this.deactivateStreetView();
|
|
296
|
+
}
|
|
297
|
+
this.setValue();
|
|
298
|
+
}
|
|
299
|
+
activateStreetView() {
|
|
300
|
+
if (!this.googleMap) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
const panorama = this.createPanorama();
|
|
304
|
+
if (panorama) {
|
|
305
|
+
this.googleMap.setStreetView(panorama);
|
|
306
|
+
this.googleMap.setOptions({
|
|
307
|
+
streetViewControl: true
|
|
308
|
+
});
|
|
309
|
+
this.registerStreetViewEvents();
|
|
310
|
+
this.updateStreetViewInputs();
|
|
311
|
+
this.toggleUIElements();
|
|
312
|
+
setTimeout(() => {
|
|
313
|
+
if (panorama.getStatus() !== this.google.maps.StreetViewStatus.OK) {
|
|
314
|
+
alert("\u6307\u5B9A\u306E\u4F4D\u7F6E\u306B\u30B9\u30C8\u30EA\u30FC\u30C8\u30D3\u30E5\u30FC\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30B9\u30C8\u30EA\u30FC\u30C8\u30D3\u30E5\u30FC\u306E\u7BC4\u56F2\u306B\u30DA\u30B0\u30DE\u30F3\u3092\u30C9\u30ED\u30C3\u30D7\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
315
|
+
}
|
|
316
|
+
}, 1e3);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
deactivateStreetView() {
|
|
320
|
+
if (this.googleMap) {
|
|
321
|
+
this.googleMap.setStreetView(null);
|
|
322
|
+
this.googleMap.setOptions({
|
|
323
|
+
streetViewControl: false
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
this.resetStreetViewInputs();
|
|
327
|
+
this.unregisterStreetViewEvents();
|
|
328
|
+
this.toggleUIElements();
|
|
329
|
+
}
|
|
330
|
+
resetStreetViewInputs() {
|
|
331
|
+
if (this.headingInput) {
|
|
332
|
+
this.headingInput.value = "";
|
|
333
|
+
}
|
|
334
|
+
if (this.pitchInput) {
|
|
335
|
+
this.pitchInput.value = "";
|
|
336
|
+
}
|
|
337
|
+
if (this.zoomViewInput) {
|
|
338
|
+
this.zoomViewInput.value = "";
|
|
339
|
+
}
|
|
340
|
+
this.setValue();
|
|
341
|
+
}
|
|
342
|
+
toggleUIElements() {
|
|
343
|
+
const isStreetViewMode = this.modeSwitcher?.checked || false;
|
|
344
|
+
const streetviewTable = this.container.querySelector(".js-streetview-table");
|
|
345
|
+
const mapTable = this.container.querySelector(".js-map-table");
|
|
346
|
+
if (streetviewTable) {
|
|
347
|
+
streetviewTable.style.display = isStreetViewMode ? "block" : "none";
|
|
348
|
+
}
|
|
349
|
+
if (mapTable) {
|
|
350
|
+
mapTable.style.display = isStreetViewMode ? "none" : "block";
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
setupSearch() {
|
|
354
|
+
if (!this.searchInput || !this.searchButton) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
this.searchInput.disabled = false;
|
|
358
|
+
this.searchButton.disabled = false;
|
|
359
|
+
const handleClick = (event) => {
|
|
360
|
+
event.preventDefault();
|
|
361
|
+
this.performSearch();
|
|
362
|
+
};
|
|
363
|
+
const handleKeydown = (event) => {
|
|
364
|
+
if (event.keyCode === 13) {
|
|
365
|
+
event.preventDefault();
|
|
366
|
+
this.searchButton?.click();
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
this.searchButton.addEventListener("click", handleClick);
|
|
370
|
+
this.searchInput.addEventListener("keydown", handleKeydown);
|
|
371
|
+
this.eventRegistry.set(this.searchButton, [{ type: "click", listener: handleClick }]);
|
|
372
|
+
this.eventRegistry.set(this.searchInput, [{ type: "keydown", listener: handleKeydown }]);
|
|
373
|
+
}
|
|
374
|
+
async performSearch() {
|
|
375
|
+
if (!this.google || !this.searchInput || !this.searchButton) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
const address = this.searchInput.value;
|
|
379
|
+
if (!address) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
this.searchInput.disabled = true;
|
|
383
|
+
this.searchButton.disabled = true;
|
|
384
|
+
const geocoder = new this.google.maps.Geocoder();
|
|
385
|
+
try {
|
|
386
|
+
const results = await new Promise((resolve, reject) => {
|
|
387
|
+
geocoder.geocode({ address }, (results2, status) => {
|
|
388
|
+
if (status === this.google.maps.GeocoderStatus.OK && results2) {
|
|
389
|
+
resolve(results2);
|
|
390
|
+
} else {
|
|
391
|
+
reject(new Error(`Geocoding failed: ${status}`));
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
if (results.length > 0) {
|
|
396
|
+
this.setPosition(results[0].geometry.location);
|
|
397
|
+
this.emitChange();
|
|
398
|
+
}
|
|
399
|
+
} catch (error) {
|
|
400
|
+
console.error("Search failed:", error);
|
|
401
|
+
} finally {
|
|
402
|
+
this.searchInput.disabled = false;
|
|
403
|
+
this.searchButton.disabled = false;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
setPosition(latLng) {
|
|
407
|
+
if (this.googleMap) {
|
|
408
|
+
this.googleMap.panTo(latLng);
|
|
409
|
+
}
|
|
410
|
+
if (this.googleMapMarker) {
|
|
411
|
+
this.googleMapMarker.setPosition(latLng);
|
|
412
|
+
}
|
|
413
|
+
const lat = Math.round(latLng.lat() * 1e6);
|
|
414
|
+
const lng = Math.round(latLng.lng() * 1e6);
|
|
415
|
+
this.latInput.value = (lat / 1e6).toString();
|
|
416
|
+
this.lngInput.value = (lng / 1e6).toString();
|
|
417
|
+
this.setValue();
|
|
418
|
+
}
|
|
419
|
+
setValue() {
|
|
420
|
+
const lat = parseFloat(this.latInput.value) || this.options.defaultValue?.lat || 0;
|
|
421
|
+
const lng = parseFloat(this.lngInput.value) || this.options.defaultValue?.lng || 0;
|
|
422
|
+
const zoom = parseInt(this.zoomInput.value, 10) || this.options.defaultValue?.zoom || 14;
|
|
423
|
+
const heading = this.headingInput ? parseFloat(this.headingInput.value) || this.options.defaultValue?.streetView?.heading || 0 : 0;
|
|
424
|
+
const pitch = this.pitchInput ? parseFloat(this.pitchInput.value) || this.options.defaultValue?.streetView?.pitch || 0 : 0;
|
|
425
|
+
const zoomView = this.zoomViewInput ? parseFloat(this.zoomViewInput.value) || this.options.defaultValue?.streetView?.zoomView || 0 : 0;
|
|
426
|
+
const type = this.modeSwitcher && this.modeSwitcher.checked ? "STREETVIEW" : "ROADMAP";
|
|
427
|
+
const newValue = {
|
|
428
|
+
type,
|
|
429
|
+
lat,
|
|
430
|
+
lng,
|
|
431
|
+
zoom,
|
|
432
|
+
streetView: { heading, pitch, zoomView }
|
|
433
|
+
};
|
|
434
|
+
this.value = {
|
|
435
|
+
...this.value,
|
|
436
|
+
...newValue
|
|
437
|
+
};
|
|
438
|
+
return this;
|
|
439
|
+
}
|
|
440
|
+
emitChange() {
|
|
441
|
+
if (this.options.onChange) {
|
|
442
|
+
this.options.onChange(this.value);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
getMap() {
|
|
446
|
+
return this.googleMap;
|
|
447
|
+
}
|
|
448
|
+
destroy() {
|
|
449
|
+
this.unregisterMapEvents();
|
|
450
|
+
this.unregisterStreetViewEvents();
|
|
451
|
+
if (this.googleMapMarker) {
|
|
452
|
+
this.googleMapMarker.setMap(null);
|
|
453
|
+
}
|
|
454
|
+
for (const [element, listeners] of this.eventRegistry) {
|
|
455
|
+
listeners.forEach(({ type, listener, options }) => {
|
|
456
|
+
element.removeEventListener(type, listener, options);
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
this.eventRegistry.clear();
|
|
460
|
+
const mapDiv = this.googleMap?.getDiv();
|
|
461
|
+
if (mapDiv) {
|
|
462
|
+
this.mapRoot.removeChild(mapDiv);
|
|
463
|
+
}
|
|
464
|
+
this.googleMap = null;
|
|
465
|
+
this.googleMapMarker = null;
|
|
466
|
+
this.google = null;
|
|
467
|
+
}
|
|
468
|
+
};
|
|
469
|
+
|
|
470
|
+
// src/google-maps/picker/index.ts
|
|
471
|
+
function setupGoogleMapsPicker(element, options = {}) {
|
|
472
|
+
if (element.googleMapsPicker) {
|
|
473
|
+
return element.googleMapsPicker;
|
|
474
|
+
}
|
|
475
|
+
const picker = new GoogleMapsPicker(element, options);
|
|
476
|
+
picker.init();
|
|
477
|
+
element.googleMapsPicker = picker;
|
|
478
|
+
return picker;
|
|
479
|
+
}
|
|
480
|
+
export {
|
|
481
|
+
setupGoogleMapsPicker as default
|
|
482
|
+
};
|
|
483
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/google-maps/picker/google-maps-picker.ts","../../../src/google-maps/picker/index.ts"],"sourcesContent":["import loadGoogleMap from '../loader';\n\nexport interface GoogleMapsValue {\n type: 'ROADMAP' | 'STREETVIEW';\n lat: number;\n lng: number;\n zoom: number;\n streetView: {\n heading: number;\n pitch: number;\n zoomView: number;\n };\n}\n\nexport interface GoogleMapsPickerOptions {\n // DOM要素セレクターまたは要素自体\n latInput: string | HTMLInputElement;\n lngInput: string | HTMLInputElement;\n zoomInput: string | HTMLInputElement;\n pitchInput?: string | HTMLInputElement;\n zoomViewInput?: string | HTMLInputElement;\n headingInput?: string | HTMLInputElement;\n modeSwitcher?: string | HTMLInputElement;\n searchInput?: string | HTMLInputElement;\n searchButton?: string | HTMLButtonElement;\n mapRoot?: string | HTMLElement;\n\n // コールバック\n onChange?: (value: GoogleMapsValue | null) => void;\n\n // 設定\n apiKey: string;\n defaultValue?: Partial<GoogleMapsValue>;\n mapOptions?: google.maps.MapOptions;\n}\n\nconst defaultOptions: GoogleMapsPickerOptions = {\n latInput: '.js-map_editable-lat, input[name^=\"map_lat_\"]',\n lngInput: '.js-map_editable-lng, input[name^=\"map_lng_\"]',\n zoomInput: '.js-map_editable-zoom, input[name^=\"map_zoom_\"]',\n pitchInput: '.js-map_editable-pitch, input[name^=\"map_view_pitch_\"]',\n zoomViewInput: '.js-map_editable-zoom-view, input[name^=\"map_view_zoom_\"]',\n headingInput: '.js-map_editable-heading, input[name^=\"map_view_heading_\"]',\n modeSwitcher: '.js-map_editable-activate, input[type=\"checkbox\"][name^=\"map_view_activate_\"]',\n searchInput: '.js-editable_map-search_text',\n searchButton: '.js-editable_map-search_button',\n mapRoot: '.js-map_editable-container',\n apiKey: ACMS.Config.googleApiKey,\n};\n\nexport default class GoogleMapsPicker {\n private options: GoogleMapsPickerOptions;\n\n private google: typeof google | null = null;\n\n private googleMap: google.maps.Map | null = null;\n\n private googleMapMarker: google.maps.Marker | null = null;\n\n // 状態管理\n private value: GoogleMapsValue;\n\n // DOM要素\n private container: HTMLElement;\n\n private mapRoot: HTMLElement;\n\n private latInput!: HTMLInputElement;\n\n private lngInput!: HTMLInputElement;\n\n private zoomInput!: HTMLInputElement;\n\n private pitchInput: HTMLInputElement | null = null;\n\n private zoomViewInput: HTMLInputElement | null = null;\n\n private headingInput: HTMLInputElement | null = null;\n\n private modeSwitcher: HTMLInputElement | null = null;\n\n private searchInput: HTMLInputElement | null = null;\n\n private searchButton: HTMLButtonElement | null = null;\n\n // イベントリスナー管理\n private eventRegistry: Map<\n Element | Document,\n Array<{\n type: string;\n listener: EventListener;\n options?: AddEventListenerOptions;\n }>\n > = new Map();\n\n constructor(elementOrSelector: string | HTMLElement, options: Partial<GoogleMapsPickerOptions>) {\n const container =\n typeof elementOrSelector === 'string'\n ? document.querySelector<HTMLElement>(elementOrSelector)\n : elementOrSelector;\n\n if (!container) {\n throw new Error('Container element not found');\n }\n\n this.container = container;\n this.options = {\n ...defaultOptions,\n ...options,\n };\n\n const latInput = this.getInputElement(this.options.latInput, this.container);\n const lngInput = this.getInputElement(this.options.lngInput, this.container);\n const zoomInput = this.getInputElement(this.options.zoomInput, this.container);\n const pitchInput = this.getInputElement(this.options.pitchInput, this.container);\n const zoomViewInput = this.getInputElement(this.options.zoomViewInput, this.container);\n const headingInput = this.getInputElement(this.options.headingInput, this.container);\n const modeSwitcher = this.getInputElement(this.options.modeSwitcher, this.container);\n const searchInput = this.getInputElement(this.options.searchInput, this.container);\n const searchButton = this.getButtonElement(this.options.searchButton, this.container);\n const mapRoot = this.getElement(this.options.mapRoot, this.container);\n // 必須要素のバリデーション\n if (!latInput) {\n throw new Error('Latitude input element is required');\n }\n\n if (!lngInput) {\n throw new Error('Longitude input element is required');\n }\n\n if (!zoomInput) {\n throw new Error('Zoom input element is required');\n }\n\n if (!mapRoot) {\n throw new Error('Map root element is required');\n }\n\n this.latInput = latInput;\n this.lngInput = lngInput;\n this.zoomInput = zoomInput;\n this.pitchInput = pitchInput;\n this.zoomViewInput = zoomViewInput;\n this.headingInput = headingInput;\n this.modeSwitcher = modeSwitcher;\n this.searchInput = searchInput;\n this.searchButton = searchButton;\n this.mapRoot = mapRoot;\n\n this.value = {\n type: 'ROADMAP',\n lat: 0,\n lng: 0,\n zoom: 0,\n streetView: {\n heading: 0,\n pitch: 0,\n zoomView: 0,\n },\n ...this.options.defaultValue,\n };\n\n if (mapRoot instanceof HTMLImageElement) {\n // compatibility\n const div = document.createElement('div');\n div.className = mapRoot.className;\n\n // style をコピー\n div.style.cssText = getComputedStyle(mapRoot).cssText;\n\n // サイズを固定\n div.style.width = `${mapRoot.width}px`;\n div.style.height = `${mapRoot.height}px`;\n mapRoot.parentNode?.replaceChild(div, mapRoot);\n this.mapRoot = div;\n }\n }\n\n async init(): Promise<GoogleMapsPicker> {\n if (this.google) {\n return this;\n }\n\n try {\n // Google Maps API読み込み\n this.google = await loadGoogleMap(this.options.apiKey);\n\n this.setValue();\n // イベントリスナー設定\n this.setupEventListeners();\n\n // マップ作成\n this.createMap(this.options.mapOptions);\n this.toggleStreetView();\n\n return this;\n } catch (error) {\n throw new Error(`Failed to initialize Google Maps: ${error}`, { cause: error });\n }\n }\n\n // DOM要素取得のヘルパーメソッド\n private getElement<T extends HTMLElement = HTMLElement>(\n elementOrSelector: string | T | undefined,\n context: HTMLElement = document.body\n ): T | null {\n if (!elementOrSelector) return null;\n\n if (typeof elementOrSelector === 'string') {\n // コンテナ自身がセレクタに一致するかチェック\n if (context.matches && context.matches(elementOrSelector)) {\n return context as T;\n }\n return context.querySelector<T>(elementOrSelector);\n }\n\n return elementOrSelector;\n }\n\n private getInputElement(\n elementOrSelector: string | HTMLInputElement | undefined,\n context: HTMLElement = document.body\n ): HTMLInputElement | null {\n const element = this.getElement(elementOrSelector, context);\n return element instanceof HTMLInputElement ? element : null;\n }\n\n private getButtonElement(\n elementOrSelector: string | HTMLButtonElement | undefined,\n context: HTMLElement = document.body\n ): HTMLButtonElement | null {\n const element = this.getElement(elementOrSelector, context);\n return element instanceof HTMLButtonElement ? element : null;\n }\n\n private setupEventListeners(): void {\n const handleLatLngChange = () => {\n if (!this.google) {\n return;\n }\n\n this.setValue();\n\n const center = new this.google.maps.LatLng(this.value.lat, this.value.lng);\n if (this.googleMap) {\n this.googleMap.panTo(center);\n }\n if (this.googleMapMarker) {\n this.googleMapMarker.setPosition(center);\n }\n this.emitChange();\n };\n this.latInput.addEventListener('change', handleLatLngChange);\n this.lngInput.addEventListener('change', handleLatLngChange);\n this.eventRegistry.set(this.latInput, [{ type: 'change', listener: handleLatLngChange }]);\n this.eventRegistry.set(this.lngInput, [{ type: 'change', listener: handleLatLngChange }]);\n\n // ズーム変更イベント\n if (this.zoomInput) {\n const handleZoomChange = () => {\n if (this.googleMap) {\n // 入力値を取り込んでから setZoom する。逆順だと古い zoom がマップに適用され、\n // zoom_changed イベント経由で入力欄が元の値に巻き戻る\n this.setValue();\n this.googleMap.setZoom(this.value.zoom);\n this.emitChange();\n }\n };\n this.zoomInput.addEventListener('change', handleZoomChange);\n this.eventRegistry.set(this.zoomInput, [{ type: 'change', listener: handleZoomChange }]);\n }\n\n // ストリートビュー有効化チェックボックス\n if (this.modeSwitcher) {\n const handleModeChange = () => {\n this.toggleStreetView();\n this.emitChange();\n };\n this.modeSwitcher.addEventListener('change', handleModeChange);\n this.eventRegistry.set(this.modeSwitcher, [{ type: 'change', listener: handleModeChange }]);\n }\n\n // 検索機能\n this.setupSearch();\n }\n\n private createMap(options: google.maps.MapOptions = {}): void {\n if (!this.google) {\n return;\n }\n\n const div = document.createElement('div');\n div.style.height = '100%';\n\n this.mapRoot.replaceChildren(div);\n\n const center = new this.google.maps.LatLng(this.value.lat, this.value.lng);\n\n this.googleMap = new this.google.maps.Map(div, {\n zoom: this.value.zoom,\n center,\n mapTypeId: this.google.maps.MapTypeId.ROADMAP,\n gestureHandling: 'cooperative',\n ...options,\n });\n\n this.registerMapEvents();\n this.createMarker();\n }\n\n private registerMapEvents(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n\n // ズームイベント\n if (this.zoomInput) {\n this.google.maps.event.addListener(this.googleMap, 'zoom_changed', () => {\n if (this.googleMap && this.zoomInput) {\n this.zoomInput.value = this.googleMap.getZoom().toString();\n this.setValue();\n this.emitChange();\n }\n });\n }\n }\n\n private unregisterMapEvents(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n this.google.maps.event.clearInstanceListeners(this.googleMap);\n }\n\n private createMarker(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n\n const center = this.googleMap.getCenter();\n this.googleMapMarker = new this.google.maps.Marker({\n position: center,\n map: this.googleMap,\n draggable: true,\n });\n\n this.google.maps.event.addListener(this.googleMapMarker, 'dragend', (event) => {\n this.setPosition(event.latLng);\n this.emitChange();\n });\n }\n\n private createPanorama(): google.maps.StreetViewPanorama | null {\n if (!this.google || !this.googleMap) {\n return null;\n }\n\n const center = this.googleMap.getCenter();\n const config: google.maps.StreetViewPanoramaOptions = {\n position: {\n lat: center.lat(),\n lng: center.lng(),\n },\n pov: {\n heading: this.value.streetView.heading,\n pitch: this.value.streetView.pitch,\n },\n zoom: this.value.streetView.zoomView,\n };\n\n // マップのdiv要素を取得\n const mapDiv = this.googleMap.getDiv();\n const panorama = new this.google!.maps.StreetViewPanorama(mapDiv, config);\n return panorama;\n }\n\n private registerStreetViewEvents(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n\n const panorama = this.googleMap.getStreetView();\n\n // POV変更イベント\n this.google.maps.event.addListener(panorama, 'pov_changed', () => {\n this.updateStreetViewInputs();\n this.emitChange();\n });\n\n // 位置変更イベント\n this.google.maps.event.addListener(panorama, 'position_changed', () => {\n const pos = panorama.getPosition();\n this.setPosition(pos);\n this.emitChange();\n });\n }\n\n private unregisterStreetViewEvents(): void {\n if (!this.google || !this.googleMap) {\n return;\n }\n const panorama = this.googleMap.getStreetView();\n this.google.maps.event.clearInstanceListeners(panorama);\n }\n\n private updateStreetViewInputs(): void {\n if (!this.googleMap) {\n return;\n }\n\n const streetView = this.googleMap.getStreetView();\n\n const pov = streetView.getPov();\n if (pov.pitch !== undefined && this.pitchInput) {\n this.pitchInput.value = pov.pitch.toString();\n }\n if (pov.heading !== undefined && this.headingInput) {\n this.headingInput.value = pov.heading.toString();\n }\n if (this.zoomViewInput) {\n this.zoomViewInput.value = streetView.getZoom().toString();\n }\n this.setValue();\n }\n\n private toggleStreetView(): void {\n const isStreetViewMode = this.modeSwitcher?.checked || false;\n\n if (isStreetViewMode) {\n this.activateStreetView();\n } else {\n this.deactivateStreetView();\n }\n\n this.setValue();\n }\n\n private activateStreetView(): void {\n if (!this.googleMap) {\n return;\n }\n\n const panorama = this.createPanorama();\n if (panorama) {\n this.googleMap.setStreetView(panorama);\n this.googleMap.setOptions({\n streetViewControl: true,\n });\n this.registerStreetViewEvents();\n this.updateStreetViewInputs();\n this.toggleUIElements();\n\n setTimeout(() => {\n if (panorama.getStatus() !== this.google!.maps.StreetViewStatus.OK) {\n alert('指定の位置にストリートビューがありません。ストリートビューの範囲にペグマンをドロップしてください。');\n }\n }, 1000);\n }\n }\n\n private deactivateStreetView(): void {\n // ストリートビューをクリア\n if (this.googleMap) {\n this.googleMap.setStreetView(null);\n this.googleMap.setOptions({\n streetViewControl: false,\n });\n }\n\n this.resetStreetViewInputs();\n this.unregisterStreetViewEvents();\n this.toggleUIElements();\n }\n\n private resetStreetViewInputs(): void {\n if (this.headingInput) {\n this.headingInput.value = '';\n }\n if (this.pitchInput) {\n this.pitchInput.value = '';\n }\n if (this.zoomViewInput) {\n this.zoomViewInput.value = '';\n }\n this.setValue();\n }\n\n private toggleUIElements(): void {\n const isStreetViewMode = this.modeSwitcher?.checked || false;\n\n const streetviewTable = this.container.querySelector<HTMLElement>('.js-streetview-table');\n const mapTable = this.container.querySelector<HTMLElement>('.js-map-table');\n\n if (streetviewTable) {\n streetviewTable.style.display = isStreetViewMode ? 'block' : 'none';\n }\n if (mapTable) {\n mapTable.style.display = isStreetViewMode ? 'none' : 'block';\n }\n }\n\n private setupSearch(): void {\n if (!this.searchInput || !this.searchButton) {\n return;\n }\n\n this.searchInput.disabled = false;\n this.searchButton.disabled = false;\n\n const handleClick = (event: Event) => {\n event.preventDefault();\n this.performSearch();\n };\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.keyCode === 13) {\n event.preventDefault();\n this.searchButton?.click();\n }\n };\n\n this.searchButton.addEventListener('click', handleClick);\n this.searchInput.addEventListener('keydown', handleKeydown);\n this.eventRegistry.set(this.searchButton, [{ type: 'click', listener: handleClick }]);\n this.eventRegistry.set(this.searchInput, [{ type: 'keydown', listener: handleKeydown as EventListener }]);\n }\n\n private async performSearch(): Promise<void> {\n if (!this.google || !this.searchInput || !this.searchButton) {\n return;\n }\n\n const address = this.searchInput.value;\n if (!address) {\n return;\n }\n\n this.searchInput.disabled = true;\n this.searchButton.disabled = true;\n\n const geocoder = new this.google.maps.Geocoder();\n\n try {\n const results = await new Promise<google.maps.GeocoderResult[]>((resolve, reject) => {\n geocoder.geocode({ address }, (results, status) => {\n if (status === this.google!.maps.GeocoderStatus.OK && results) {\n resolve(results);\n } else {\n reject(new Error(`Geocoding failed: ${status}`));\n }\n });\n });\n\n if (results.length > 0) {\n this.setPosition(results[0].geometry.location);\n this.emitChange();\n }\n } catch (error) {\n console.error('Search failed:', error);\n } finally {\n this.searchInput.disabled = false;\n this.searchButton.disabled = false;\n }\n }\n\n private setPosition(latLng: google.maps.LatLng): void {\n if (this.googleMap) {\n this.googleMap.panTo(latLng);\n }\n if (this.googleMapMarker) {\n this.googleMapMarker.setPosition(latLng);\n }\n\n const lat = Math.round(latLng.lat() * 1000000);\n const lng = Math.round(latLng.lng() * 1000000);\n\n this.latInput.value = (lat / 1000000).toString();\n this.lngInput.value = (lng / 1000000).toString();\n\n this.setValue();\n }\n\n private setValue(): GoogleMapsPicker {\n const lat = parseFloat(this.latInput.value) || this.options.defaultValue?.lat || 0;\n const lng = parseFloat(this.lngInput.value) || this.options.defaultValue?.lng || 0;\n const zoom = parseInt(this.zoomInput.value, 10) || this.options.defaultValue?.zoom || 14;\n const heading = this.headingInput\n ? parseFloat(this.headingInput.value) || this.options.defaultValue?.streetView?.heading || 0\n : 0;\n const pitch = this.pitchInput\n ? parseFloat(this.pitchInput.value) || this.options.defaultValue?.streetView?.pitch || 0\n : 0;\n const zoomView = this.zoomViewInput\n ? parseFloat(this.zoomViewInput.value) || this.options.defaultValue?.streetView?.zoomView || 0\n : 0;\n const type = this.modeSwitcher && this.modeSwitcher.checked ? 'STREETVIEW' : 'ROADMAP';\n\n const newValue: GoogleMapsValue = {\n type,\n lat,\n lng,\n zoom,\n streetView: { heading, pitch, zoomView },\n };\n\n this.value = {\n ...this.value,\n ...newValue,\n };\n\n return this;\n }\n\n private emitChange(): void {\n if (this.options.onChange) {\n this.options.onChange(this.value);\n }\n }\n\n getMap(): google.maps.Map | null {\n return this.googleMap;\n }\n\n destroy(): void {\n // Google Maps APIのイベントリスナーを削除\n this.unregisterMapEvents();\n this.unregisterStreetViewEvents();\n if (this.googleMapMarker) {\n this.googleMapMarker.setMap(null);\n }\n\n // Vanilla JSイベントリスナーを削除\n for (const [element, listeners] of this.eventRegistry) {\n listeners.forEach(({ type, listener, options }) => {\n element.removeEventListener(type, listener, options);\n });\n }\n this.eventRegistry.clear();\n\n // プレビューを元に戻す\n const mapDiv = this.googleMap?.getDiv() as HTMLElement | null;\n if (mapDiv) {\n this.mapRoot.removeChild(mapDiv);\n }\n\n // インスタンス変数をクリア\n this.googleMap = null;\n this.googleMapMarker = null;\n this.google = null;\n }\n}\n","import type { GoogleMapsPickerOptions } from './google-maps-picker';\nimport GoogleMapsPicker from './google-maps-picker';\n\nexport default function setupGoogleMapsPicker(\n element: HTMLElement & { googleMapsPicker?: GoogleMapsPicker },\n options: Partial<GoogleMapsPickerOptions> = {}\n): GoogleMapsPicker {\n if (element.googleMapsPicker) {\n return element.googleMapsPicker;\n }\n\n const picker = new GoogleMapsPicker(element, options);\n\n picker.init();\n\n element.googleMapsPicker = picker;\n\n return picker;\n}\n"],"mappings":"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","names":["results"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
loader_default
|
|
3
|
+
} from "../chunk-ZPZHEKTI.mjs";
|
|
4
|
+
|
|
5
|
+
// src/google-maps/street-view.ts
|
|
6
|
+
var street_view_default = async (element) => {
|
|
7
|
+
const lat = parseFloat(element.getAttribute("data-lat") ?? "0");
|
|
8
|
+
const lng = parseFloat(element.getAttribute("data-lng") ?? "0");
|
|
9
|
+
let pitch = parseFloat(element.getAttribute("data-pitch") ?? "0");
|
|
10
|
+
let heading = parseFloat(element.getAttribute("data-heading") ?? "0");
|
|
11
|
+
let zoom = parseFloat(element.getAttribute("data-zoom") ?? "0");
|
|
12
|
+
pitch = Number.isNaN(pitch) ? 0 : pitch;
|
|
13
|
+
heading = Number.isNaN(heading) ? 0 : heading;
|
|
14
|
+
zoom = Number.isNaN(zoom) ? 0 : zoom;
|
|
15
|
+
const google = await loader_default(ACMS.Config.googleApiKey);
|
|
16
|
+
new google.maps.StreetViewPanorama(element, {
|
|
17
|
+
position: { lat, lng },
|
|
18
|
+
pov: { heading, pitch },
|
|
19
|
+
zoom
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
street_view_default as default
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=street-view.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/google-maps/street-view.ts"],"sourcesContent":["import loadGoogleMap from './loader';\n\nexport default async (element: HTMLElement) => {\n const lat = parseFloat(element.getAttribute('data-lat') ?? '0');\n const lng = parseFloat(element.getAttribute('data-lng') ?? '0');\n let pitch = parseFloat(element.getAttribute('data-pitch') ?? '0');\n let heading = parseFloat(element.getAttribute('data-heading') ?? '0');\n let zoom = parseFloat(element.getAttribute('data-zoom') ?? '0');\n pitch = Number.isNaN(pitch) ? 0 : pitch;\n heading = Number.isNaN(heading) ? 0 : heading;\n zoom = Number.isNaN(zoom) ? 0 : zoom;\n\n const google = await loadGoogleMap(ACMS.Config.googleApiKey);\n\n new google.maps.StreetViewPanorama(element, {\n position: { lat, lng },\n pov: { heading, pitch },\n zoom,\n });\n};\n"],"mappings":";;;;;AAEA,IAAO,sBAAQ,OAAO,YAAyB;AAC7C,QAAM,MAAM,WAAW,QAAQ,aAAa,UAAU,KAAK,GAAG;AAC9D,QAAM,MAAM,WAAW,QAAQ,aAAa,UAAU,KAAK,GAAG;AAC9D,MAAI,QAAQ,WAAW,QAAQ,aAAa,YAAY,KAAK,GAAG;AAChE,MAAI,UAAU,WAAW,QAAQ,aAAa,cAAc,KAAK,GAAG;AACpE,MAAI,OAAO,WAAW,QAAQ,aAAa,WAAW,KAAK,GAAG;AAC9D,UAAQ,OAAO,MAAM,KAAK,IAAI,IAAI;AAClC,YAAU,OAAO,MAAM,OAAO,IAAI,IAAI;AACtC,SAAO,OAAO,MAAM,IAAI,IAAI,IAAI;AAEhC,QAAM,SAAS,MAAM,eAAc,KAAK,OAAO,YAAY;AAE3D,MAAI,OAAO,KAAK,mBAAmB,SAAS;AAAA,IAC1C,UAAU,EAAE,KAAK,IAAI;AAAA,IACrB,KAAK,EAAE,SAAS,MAAM;AAAA,IACtB;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// src/htmx/geolocation.ts
|
|
2
|
+
import htmx from "htmx.org";
|
|
3
|
+
(function() {
|
|
4
|
+
let isRequesting = false;
|
|
5
|
+
htmx.defineExtension("acms-geolocation", {
|
|
6
|
+
onEvent(name, event) {
|
|
7
|
+
if (name === "htmx:beforeRequest") {
|
|
8
|
+
if (isRequesting) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
const { requestConfig } = event.detail;
|
|
12
|
+
event.preventDefault();
|
|
13
|
+
ACMS.Library.geolocation(
|
|
14
|
+
(latitude, longitude) => {
|
|
15
|
+
const { formData } = requestConfig;
|
|
16
|
+
formData.append("lat", latitude.toString());
|
|
17
|
+
formData.append("lng", longitude.toString());
|
|
18
|
+
formData.append("query[]", "lat");
|
|
19
|
+
formData.append("query[]", "lng");
|
|
20
|
+
isRequesting = true;
|
|
21
|
+
htmx.ajax(requestConfig.verb, requestConfig.path, {
|
|
22
|
+
source: requestConfig.elt,
|
|
23
|
+
event: requestConfig.triggeringEvent,
|
|
24
|
+
target: requestConfig.target,
|
|
25
|
+
values: requestConfig.parameters,
|
|
26
|
+
headers: requestConfig.headers
|
|
27
|
+
}).finally(() => {
|
|
28
|
+
isRequesting = false;
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
(message) => {
|
|
32
|
+
window.alert(message);
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
})();
|
|
40
|
+
//# sourceMappingURL=geolocation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/htmx/geolocation.ts"],"sourcesContent":["import htmx from 'htmx.org';\n\n(function () {\n /**\n * リクエスト中かどうかを管理するフラグ\n */\n let isRequesting = false;\n htmx.defineExtension('acms-geolocation', {\n onEvent(name, event) {\n if (name === 'htmx:beforeRequest') {\n if (isRequesting) {\n // リクエスト中の場合は処理をスキップ\n return true;\n }\n const { requestConfig } = event.detail;\n\n event.preventDefault(); // 一旦リクエストをキャンセル\n\n ACMS.Library.geolocation(\n (latitude: number, longitude: number) => {\n const { formData } = requestConfig;\n // 緯度・経度の hidden フィールドを追加\n formData.append('lat', latitude.toString());\n formData.append('lng', longitude.toString());\n formData.append('query[]', 'lat');\n formData.append('query[]', 'lng');\n\n // 改めてリクエストを送信\n isRequesting = true;\n htmx\n .ajax(requestConfig.verb, requestConfig.path, {\n source: requestConfig.elt,\n event: requestConfig.triggeringEvent,\n target: requestConfig.target,\n values: requestConfig.parameters,\n headers: requestConfig.headers,\n })\n .finally(() => {\n // リクエストが完了したらフラグをリセット\n isRequesting = false;\n });\n },\n (message: string) => {\n window.alert(message);\n }\n );\n }\n return true;\n },\n });\n})();\n"],"mappings":";AAAA,OAAO,UAAU;AAAA,CAEhB,WAAY;AAIX,MAAI,eAAe;AACnB,OAAK,gBAAgB,oBAAoB;AAAA,IACvC,QAAQ,MAAM,OAAO;AACnB,UAAI,SAAS,sBAAsB;AACjC,YAAI,cAAc;AAEhB,iBAAO;AAAA,QACT;AACA,cAAM,EAAE,cAAc,IAAI,MAAM;AAEhC,cAAM,eAAe;AAErB,aAAK,QAAQ;AAAA,UACX,CAAC,UAAkB,cAAsB;AACvC,kBAAM,EAAE,SAAS,IAAI;AAErB,qBAAS,OAAO,OAAO,SAAS,SAAS,CAAC;AAC1C,qBAAS,OAAO,OAAO,UAAU,SAAS,CAAC;AAC3C,qBAAS,OAAO,WAAW,KAAK;AAChC,qBAAS,OAAO,WAAW,KAAK;AAGhC,2BAAe;AACf,iBACG,KAAK,cAAc,MAAM,cAAc,MAAM;AAAA,cAC5C,QAAQ,cAAc;AAAA,cACtB,OAAO,cAAc;AAAA,cACrB,QAAQ,cAAc;AAAA,cACtB,QAAQ,cAAc;AAAA,cACtB,SAAS,cAAc;AAAA,YACzB,CAAC,EACA,QAAQ,MAAM;AAEb,6BAAe;AAAA,YACjB,CAAC;AAAA,UACL;AAAA,UACA,CAAC,YAAoB;AACnB,mBAAO,MAAM,OAAO;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH,GAAG;","names":[]}
|
package/dist/icons.d.ts
ADDED