@operato/scene-google-map 7.0.1 → 7.3.19

Sign up to get free protection for your applications and to get access to all the features.
package/src/google-map.ts DELETED
@@ -1,222 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
-
5
- const NATURE: ComponentNature = {
6
- mutable: false,
7
- resizable: true,
8
- rotatable: true,
9
- properties: [
10
- {
11
- type: 'number',
12
- label: 'latitude',
13
- name: 'lat',
14
- property: {
15
- step: 0.000001,
16
- max: 90,
17
- min: -90
18
- }
19
- },
20
- {
21
- type: 'number',
22
- label: 'longitude',
23
- name: 'lng',
24
- property: {
25
- step: 0.000001,
26
- min: -180,
27
- max: 180
28
- }
29
- },
30
- {
31
- type: 'number',
32
- label: 'zoom',
33
- name: 'zoom'
34
- },
35
- {
36
- type: 'string',
37
- label: 'api-key',
38
- name: 'apiKey'
39
- }
40
- ],
41
- 'value-property': 'latlng'
42
- // help: 'scene/component/gmap-map'
43
- }
44
-
45
- import {
46
- Component,
47
- ComponentNature,
48
- HTMLOverlayContainer,
49
- Properties,
50
- ScriptLoader,
51
- error
52
- } from '@hatiolab/things-scene'
53
-
54
- function getGlobalScale(component: GoogleMap) {
55
- var scale = { x: 1, y: 1 }
56
- var parent: Component = component
57
-
58
- while (parent) {
59
- let { x, y } = parent.get('scale') || { x: 1, y: 1 }
60
- scale.x *= x || 1
61
- scale.y *= y || 1
62
-
63
- parent = parent.parent
64
- }
65
- return scale
66
- }
67
-
68
- export default class GoogleMap extends HTMLOverlayContainer {
69
- static load(component: GoogleMap) {
70
- var key = component.get('apiKey')
71
- ScriptLoader.load('https://maps.googleapis.com/maps/api/js' + (key ? '?key=' + key : '')).then(
72
- () => component.onload(),
73
- error
74
- )
75
- }
76
-
77
- private static loaded: boolean = false
78
-
79
- private _listenTo?: Component
80
- private _listener? = function (this: GoogleMap, after: any) {
81
- after.scale && this.rescale()
82
- }.bind(this)
83
-
84
- private _anchor?: HTMLDivElement
85
- private _map?: google.maps.Map
86
-
87
- ready() {
88
- super.ready()
89
-
90
- if (this.rootModel) {
91
- this._listenTo = this.rootModel
92
- this.rootModel.on('change', this._listener!)
93
- }
94
- }
95
-
96
- removed() {
97
- if (this._listenTo) {
98
- this._listenTo.off('change', this._listener!)
99
-
100
- delete this._listenTo
101
- delete this._listener
102
- }
103
- }
104
-
105
- /*
106
- * google map은 scale된 상태에서 마우스 포지션을 정확히 매핑하지 못하므로, 마커를 정상적으로 동작시키지 못한다.
107
- * 따라서, google map의 경우에는 부모의 스케일의 역으로 transform해서, scale을 1로 맞추어야 한다.
108
- */
109
- rescale() {
110
- var anchor = this._anchor
111
- if (!anchor) {
112
- return
113
- }
114
- var scale = getGlobalScale(this)
115
-
116
- var sx = 1 / scale.x
117
- var sy = 1 / scale.y
118
-
119
- var transform = `scale(${sx}, ${sy})`
120
-
121
- ;['-webkit-', '-moz-', '-ms-', '-o-', ''].forEach(prefix => {
122
- anchor!.style[(prefix + 'transform') as any] = transform
123
- anchor!.style[(prefix + 'transform-origin') as any] = '0px 0px'
124
- })
125
-
126
- var { width, height } = this.state
127
- anchor.style.width = width * scale.x + 'px'
128
- anchor.style.height = height * scale.y + 'px'
129
-
130
- if (GoogleMap.loaded) {
131
- google.maps.event.trigger(this.map, 'resize')
132
- let { lat, lng } = this.state
133
- this.map &&
134
- this.map.setCenter({
135
- lat,
136
- lng
137
- })
138
- }
139
- }
140
-
141
- createElement() {
142
- super.createElement()
143
- this._anchor = document.createElement('div')
144
- this.element.appendChild(this._anchor)
145
- this.rescale()
146
-
147
- GoogleMap.load(this)
148
- }
149
-
150
- onload() {
151
- GoogleMap.loaded = true
152
-
153
- var { lat, lng, zoom } = this.state
154
-
155
- try {
156
- this._map = new google.maps.Map(this._anchor!, {
157
- zoom,
158
- center: new google.maps.LatLng(lat, lng)
159
- })
160
- } finally {
161
- /*
162
- * setState 로 map 객체가 생성되었음을 change 이벤트로 알려줄 수 있다
163
- * - set('map', this._map)으로 만들 지 않도록 주의한다.
164
- * - setState('map', this._map)으로해야 컴포넌트 모델에 추가되지 않는다.
165
- */
166
- this.setState('map', this._map)
167
- this.rescale()
168
- }
169
- }
170
-
171
- get tagName() {
172
- return 'div'
173
- }
174
-
175
- get map() {
176
- return this._map
177
- }
178
-
179
- dispose() {
180
- super.dispose()
181
-
182
- delete this._anchor
183
- }
184
-
185
- setElementProperties(div: HTMLDivElement) {
186
- this.rescale()
187
- }
188
-
189
- onchange(after: Properties, before: Properties) {
190
- if (GoogleMap.loaded) {
191
- if (after.zoom) {
192
- this.map!.setZoom(after.zoom)
193
- }
194
-
195
- if ('lat' in after || 'lng' in after) {
196
- let { lat, lng } = this.state
197
- this.map!.setCenter(new google.maps.LatLng(lat, lng))
198
- }
199
- }
200
-
201
- super.onchange(after, before)
202
-
203
- this.rescale()
204
- }
205
-
206
- get latlng() {
207
- return {
208
- lat: this.get('lat'),
209
- lng: this.get('lng')
210
- }
211
- }
212
-
213
- set latlng(latlng) {
214
- this.set(latlng)
215
- }
216
-
217
- get nature() {
218
- return NATURE
219
- }
220
- }
221
-
222
- Component.register('google-map', GoogleMap)
package/src/index.ts DELETED
@@ -1,8 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import GmapMarker from './gmap-marker'
5
- import GmapPath from './gmap-path'
6
- import GoogleMap from './google-map'
7
-
8
- export default [GmapMarker, GmapPath, GoogleMap]
@@ -1,20 +0,0 @@
1
- const icon = new URL('../../icons/gmap-marker.png', import.meta.url).href
2
-
3
- export default {
4
- type: 'gmap-marker',
5
- description: 'google map marker',
6
- group: 'etc',
7
- /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
8
- icon,
9
- model: {
10
- type: 'gmap-marker',
11
- left: 150,
12
- top: 150,
13
- width: 40,
14
- height: 60,
15
- lat: 22.308117,
16
- lng: 114.225443,
17
- fillStyle: '#00ff00',
18
- hidden: true
19
- }
20
- }
@@ -1,25 +0,0 @@
1
- const icon = new URL('../../icons/gmap-path.png', import.meta.url).href
2
-
3
- export default {
4
- type: 'gmap-path',
5
- description: 'google map path',
6
- group: 'etc',
7
- /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
8
- icon,
9
- model: {
10
- type: 'gmap-path',
11
- left: 150,
12
- top: 150,
13
- width: 40,
14
- height: 60,
15
- latlngs: [
16
- {
17
- lat: 22.308117,
18
- lng: 114.225443
19
- }
20
- ],
21
- startEndMarkerDifferentDesign: true,
22
- fillStyle: '#00ff00',
23
- hidden: true
24
- }
25
- }
@@ -1,20 +0,0 @@
1
- const icon = new URL('../../icons/google-map.png', import.meta.url).href
2
-
3
- export default {
4
- type: 'google-map',
5
- description: 'google-map',
6
- group: 'etc',
7
- /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */
8
- icon,
9
- model: {
10
- type: 'google-map',
11
- left: 150,
12
- top: 150,
13
- width: 300,
14
- height: 200,
15
- lat: 22.308117,
16
- lng: 114.225443,
17
- zoom: 20,
18
- apiKey: 'AIzaSyBgQZb-SFqjQBC_XTxNiz0XapejNwV9PgA'
19
- }
20
- }
@@ -1,5 +0,0 @@
1
- import GoogleMap from './google-map'
2
- import GmapMarker from './gmap-marker'
3
- import GmapPath from './gmap-path'
4
-
5
- export default [GoogleMap, GmapMarker, GmapPath]
@@ -1,67 +0,0 @@
1
- <!--
2
- @license
3
- Copyright © HatioLab Inc. All rights reserved.
4
- -->
5
- <!doctype html>
6
- <html>
7
- <head>
8
- <meta charset="utf-8">
9
- <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
10
-
11
- <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
12
- <script src="../../web-component-tester/browser.js"></script>
13
-
14
- <!-- Step 1: import the element to test -->
15
- <link rel="import" href="../things-scene-google-map.html">
16
- </head>
17
- <body>
18
-
19
- <!-- You can use the document as a place to set up your fixtures. -->
20
- <test-fixture id="things-scene-google-map-fixture">
21
- <template>
22
- <things-scene-google-map>
23
- <h2>things-scene-google-map</h2>
24
- </things-scene-google-map>
25
- </template>
26
- </test-fixture>
27
-
28
- <script>
29
- suite('<things-scene-google-map>', function() {
30
-
31
- var myEl;
32
-
33
- setup(function() {
34
- myEl = fixture('things-scene-google-map-fixture');
35
- });
36
-
37
- test('defines the "author" property', function() {
38
- assert.equal(myEl.author.name, 'Dimitri Glazkov');
39
- assert.equal(myEl.author.image, 'http://addyosmani.com/blog/wp-content/uploads/2013/04/unicorn.jpg');
40
- });
41
-
42
- test('says hello', function() {
43
- assert.equal(myEl.sayHello(), 'things-scene-google-map says, Hello World!');
44
-
45
- var greetings = myEl.sayHello('greetings Earthlings');
46
- assert.equal(greetings, 'things-scene-google-map says, greetings Earthlings');
47
- });
48
-
49
- test('fires lasers', function(done) {
50
- myEl.addEventListener('things-scene-google-map-lasers', function(event) {
51
- assert.equal(event.detail.sound, 'Pew pew!');
52
- done();
53
- });
54
- myEl.fireLasers();
55
- });
56
-
57
- test('distributed children', function() {
58
- var els = myEl.getContentChildren();
59
- assert.equal(els.length, 1, 'one distributed node');
60
- assert.equal(els[0], myEl.querySelector('h2'), 'content distributed correctly');
61
- });
62
-
63
- });
64
- </script>
65
-
66
- </body>
67
- </html>
package/test/index.html DELETED
@@ -1,24 +0,0 @@
1
- <!--
2
- @license
3
- Copyright © HatioLab Inc. All rights reserved.
4
- -->
5
- <!DOCTYPE html>
6
- <html>
7
- <head>
8
- <meta charset="utf-8">
9
- <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
10
-
11
- <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
12
- <script src="../../web-component-tester/browser.js"></script>
13
- </head>
14
- <body>
15
- <script>
16
- // Load and run all tests (.html, .js):
17
- WCT.loadSuites([
18
- 'basic-test.html',
19
- 'basic-test.html?dom=shadow'
20
- ]);
21
- </script>
22
-
23
- </body>
24
- </html>
@@ -1,33 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
-
5
- import './util'
6
-
7
- import { expect } from 'chai'
8
-
9
- import '../../bower_components/things-scene-core/things-scene-min'
10
- import { GoogleMap } from '../../src/index'
11
-
12
- describe('GoogleMap', function () {
13
-
14
- var board;
15
-
16
- beforeEach(function () {
17
- board = scene.create({
18
- model: {
19
- components: [{
20
- id: 'google-map',
21
- type: 'google-map'
22
- }]
23
- }
24
- })
25
- });
26
-
27
- it('component should be found by its id.', function () {
28
-
29
- var component = board.findById('google-map')
30
-
31
- expect(!!component).not.to.equal(false);
32
- });
33
- });
package/test/unit/util.js DELETED
@@ -1,22 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
-
5
- var noop = () => {}
6
-
7
- global.Canvas = require('canvas');
8
-
9
- Canvas.prototype.setAttribute = noop;
10
- Canvas.prototype.style = {};
11
-
12
- global.Image = Canvas.Image;
13
- global.screen = {
14
- width: 1280,
15
- height: 800
16
- };
17
-
18
- global.window = global;
19
-
20
- global.addEventListener = noop;
21
- global.location = {};
22
- global.getComputedStyle = noop;
package/tsconfig.json DELETED
@@ -1,23 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es2018",
4
- "module": "esnext",
5
- "moduleResolution": "node",
6
- "noEmitOnError": true,
7
- "lib": ["es2019", "dom"],
8
- "strict": true,
9
- "esModuleInterop": false,
10
- "allowJs": true,
11
- "allowSyntheticDefaultImports": true,
12
- "experimentalDecorators": true,
13
- "importHelpers": true,
14
- "outDir": "dist",
15
- "sourceMap": true,
16
- "inlineSources": true,
17
- "rootDir": "src",
18
- "declaration": true,
19
- "incremental": true,
20
- "skipLibCheck": true
21
- },
22
- "include": ["**/*.ts", "*.d.ts"]
23
- }