@granite-js/naver-map 1.0.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/CHANGELOG.md +7 -0
- package/GraniteNaverMap.podspec +81 -0
- package/android/build.gradle +160 -0
- package/android/gradle.properties +5 -0
- package/android/src/builtinProvider/java/run/granite/navermap/builtinProvider/BuiltInGraniteNaverMapProvider.kt +549 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/java/run/granite/navermap/GraniteNaverMapEvents.kt +91 -0
- package/android/src/main/java/run/granite/navermap/GraniteNaverMapPackage.kt +16 -0
- package/android/src/main/java/run/granite/navermap/GraniteNaverMapProvider.kt +242 -0
- package/android/src/main/java/run/granite/navermap/GraniteNaverMapRegistry.kt +116 -0
- package/android/src/main/java/run/granite/navermap/GraniteNaverMapView.kt +732 -0
- package/android/src/newarch/java/run/granite/navermap/GraniteNaverMapViewManager.kt +446 -0
- package/android/src/oldarch/java/run/granite/navermap/GraniteNaverMapViewManager.kt +249 -0
- package/dist/module/NaverMapView.js +110 -0
- package/dist/module/NaverMapView.js.map +1 -0
- package/dist/module/index.js +6 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/internals/colorUtils.js +624 -0
- package/dist/module/internals/colorUtils.js.map +1 -0
- package/dist/module/internals/context.js +8 -0
- package/dist/module/internals/context.js.map +1 -0
- package/dist/module/internals/id.js +10 -0
- package/dist/module/internals/id.js.map +1 -0
- package/dist/module/internals/useMapOverlay.js +44 -0
- package/dist/module/internals/useMapOverlay.js.map +1 -0
- package/dist/module/internals/usePreservedReference.js +36 -0
- package/dist/module/internals/usePreservedReference.js.map +1 -0
- package/dist/module/overlays/ArrowheadPath.js +37 -0
- package/dist/module/overlays/ArrowheadPath.js.map +1 -0
- package/dist/module/overlays/Circle.js +35 -0
- package/dist/module/overlays/Circle.js.map +1 -0
- package/dist/module/overlays/GroundOverlay.js +30 -0
- package/dist/module/overlays/GroundOverlay.js.map +1 -0
- package/dist/module/overlays/InfoWindow.js +32 -0
- package/dist/module/overlays/InfoWindow.js.map +1 -0
- package/dist/module/overlays/Marker.js +37 -0
- package/dist/module/overlays/Marker.js.map +1 -0
- package/dist/module/overlays/Path.js +41 -0
- package/dist/module/overlays/Path.js.map +1 -0
- package/dist/module/overlays/Polygon.js +51 -0
- package/dist/module/overlays/Polygon.js.map +1 -0
- package/dist/module/overlays/Polyline.js +60 -0
- package/dist/module/overlays/Polyline.js.map +1 -0
- package/dist/module/overlays/index.js +11 -0
- package/dist/module/overlays/index.js.map +1 -0
- package/dist/module/package.json +1 -0
- package/dist/module/specs/GraniteNaverMapViewNativeComponent.ts +352 -0
- package/dist/module/types/Coord.js +2 -0
- package/dist/module/types/Coord.js.map +1 -0
- package/dist/module/types/index.js +29 -0
- package/dist/module/types/index.js.map +1 -0
- package/dist/typescript/NaverMapView.d.ts +41 -0
- package/dist/typescript/index.d.ts +3 -0
- package/dist/typescript/internals/colorUtils.d.ts +10 -0
- package/dist/typescript/internals/context.d.ts +8 -0
- package/dist/typescript/internals/id.d.ts +1 -0
- package/dist/typescript/internals/useMapOverlay.d.ts +15 -0
- package/dist/typescript/internals/usePreservedReference.d.ts +6 -0
- package/dist/typescript/overlays/ArrowheadPath.d.ts +11 -0
- package/dist/typescript/overlays/Circle.d.ts +10 -0
- package/dist/typescript/overlays/GroundOverlay.d.ts +11 -0
- package/dist/typescript/overlays/InfoWindow.d.ts +14 -0
- package/dist/typescript/overlays/Marker.d.ts +16 -0
- package/dist/typescript/overlays/Path.d.ts +15 -0
- package/dist/typescript/overlays/Polygon.d.ts +10 -0
- package/dist/typescript/overlays/Polyline.d.ts +11 -0
- package/dist/typescript/overlays/index.d.ts +16 -0
- package/dist/typescript/specs/GraniteNaverMapViewNativeComponent.d.ts +92 -0
- package/dist/typescript/types/Coord.d.ts +4 -0
- package/dist/typescript/types/index.d.ts +55 -0
- package/ios/GraniteNaverMap-Bridging-Header.h +20 -0
- package/ios/GraniteNaverMapProvider.swift +312 -0
- package/ios/GraniteNaverMapRegistry.swift +91 -0
- package/ios/GraniteNaverMapView.h +15 -0
- package/ios/GraniteNaverMapView.mm +390 -0
- package/ios/GraniteNaverMapViewImpl.swift +496 -0
- package/ios/GraniteNaverMapViewManager.m +67 -0
- package/ios/GraniteNaverMapViewManager.swift +133 -0
- package/ios/GraniteNaverMapViewWrapper.swift +215 -0
- package/ios/builtinProvider/BuiltInNaverMapProvider.swift +489 -0
- package/ios/builtinProvider/GraniteNaverMapMarkerData.swift +66 -0
- package/ios/builtinProvider/NMFMarker+Extension.swift +65 -0
- package/ios/builtinProvider/RCTConvert+NMFMapView.h +17 -0
- package/ios/builtinProvider/RCTConvert+NMFMapView.m +67 -0
- package/package.json +103 -0
- package/src/NaverMapView.tsx +168 -0
- package/src/index.tsx +3 -0
- package/src/internals/colorUtils.ts +697 -0
- package/src/internals/context.ts +14 -0
- package/src/internals/id.ts +9 -0
- package/src/internals/useMapOverlay.ts +59 -0
- package/src/internals/usePreservedReference.ts +41 -0
- package/src/overlays/ArrowheadPath.ts +71 -0
- package/src/overlays/Circle.ts +68 -0
- package/src/overlays/GroundOverlay.ts +62 -0
- package/src/overlays/InfoWindow.ts +68 -0
- package/src/overlays/Marker.ts +83 -0
- package/src/overlays/Path.ts +87 -0
- package/src/overlays/Polygon.ts +83 -0
- package/src/overlays/Polyline.ts +93 -0
- package/src/overlays/index.ts +23 -0
- package/src/specs/GraniteNaverMapViewNativeComponent.ts +352 -0
- package/src/types/Coord.ts +4 -0
- package/src/types/index.ts +78 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
package run.granite.navermap
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.View
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Data class for map coordinates
|
|
8
|
+
*/
|
|
9
|
+
data class GraniteNaverMapCoordinate(
|
|
10
|
+
val latitude: Double,
|
|
11
|
+
val longitude: Double
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Data class for camera position
|
|
16
|
+
*/
|
|
17
|
+
data class GraniteNaverMapCameraPosition(
|
|
18
|
+
val target: GraniteNaverMapCoordinate,
|
|
19
|
+
val zoom: Double,
|
|
20
|
+
val tilt: Double = 0.0,
|
|
21
|
+
val bearing: Double = 0.0
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Data class for bounds
|
|
26
|
+
*/
|
|
27
|
+
data class GraniteNaverMapBounds(
|
|
28
|
+
val southWest: GraniteNaverMapCoordinate,
|
|
29
|
+
val northEast: GraniteNaverMapCoordinate
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Map type enum
|
|
34
|
+
*/
|
|
35
|
+
enum class GraniteNaverMapType {
|
|
36
|
+
BASIC, NAVI, SATELLITE, HYBRID, TERRAIN, NONE
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Location tracking mode enum
|
|
41
|
+
*/
|
|
42
|
+
enum class GraniteNaverMapLocationTrackingMode {
|
|
43
|
+
NONE, NO_FOLLOW, FOLLOW, FACE
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Marker data
|
|
48
|
+
*/
|
|
49
|
+
data class GraniteNaverMapMarkerData(
|
|
50
|
+
val identifier: String,
|
|
51
|
+
val coordinate: GraniteNaverMapCoordinate,
|
|
52
|
+
val width: Int,
|
|
53
|
+
val height: Int,
|
|
54
|
+
val zIndex: Int,
|
|
55
|
+
val rotation: Float,
|
|
56
|
+
val flat: Boolean,
|
|
57
|
+
val alpha: Float,
|
|
58
|
+
val pinColor: Int,
|
|
59
|
+
val image: String
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Polyline data
|
|
64
|
+
*/
|
|
65
|
+
data class GraniteNaverMapPolylineData(
|
|
66
|
+
val identifier: String,
|
|
67
|
+
val coordinates: List<GraniteNaverMapCoordinate>,
|
|
68
|
+
val strokeWidth: Float,
|
|
69
|
+
val strokeColor: Int,
|
|
70
|
+
val zIndex: Int,
|
|
71
|
+
val lineCap: Int,
|
|
72
|
+
val lineJoin: Int,
|
|
73
|
+
val pattern: List<Int>
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Polygon data
|
|
78
|
+
*/
|
|
79
|
+
data class GraniteNaverMapPolygonData(
|
|
80
|
+
val identifier: String,
|
|
81
|
+
val coordinates: List<GraniteNaverMapCoordinate>,
|
|
82
|
+
val holes: List<List<GraniteNaverMapCoordinate>>,
|
|
83
|
+
val fillColor: Int,
|
|
84
|
+
val strokeColor: Int,
|
|
85
|
+
val strokeWidth: Float,
|
|
86
|
+
val zIndex: Int
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Circle data
|
|
91
|
+
*/
|
|
92
|
+
data class GraniteNaverMapCircleData(
|
|
93
|
+
val identifier: String,
|
|
94
|
+
val center: GraniteNaverMapCoordinate,
|
|
95
|
+
val radius: Double,
|
|
96
|
+
val fillColor: Int,
|
|
97
|
+
val strokeColor: Int,
|
|
98
|
+
val strokeWidth: Float,
|
|
99
|
+
val zIndex: Int
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Path data
|
|
104
|
+
*/
|
|
105
|
+
data class GraniteNaverMapPathData(
|
|
106
|
+
val identifier: String,
|
|
107
|
+
val coordinates: List<GraniteNaverMapCoordinate>,
|
|
108
|
+
val width: Float,
|
|
109
|
+
val outlineWidth: Float,
|
|
110
|
+
val color: Int,
|
|
111
|
+
val outlineColor: Int,
|
|
112
|
+
val passedColor: Int,
|
|
113
|
+
val passedOutlineColor: Int,
|
|
114
|
+
val patternImage: String,
|
|
115
|
+
val patternInterval: Int,
|
|
116
|
+
val progress: Float,
|
|
117
|
+
val zIndex: Int
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Provider delegate interface for map events
|
|
122
|
+
*/
|
|
123
|
+
interface GraniteNaverMapProviderDelegate {
|
|
124
|
+
fun onMapInitialized()
|
|
125
|
+
fun onCameraChange(position: GraniteNaverMapCameraPosition, contentRegion: List<GraniteNaverMapCoordinate>, coveringRegion: List<GraniteNaverMapCoordinate>)
|
|
126
|
+
fun onTouch(reason: Int, animated: Boolean)
|
|
127
|
+
fun onClick(x: Double, y: Double, latitude: Double, longitude: Double)
|
|
128
|
+
fun onMarkerClick(id: String)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Factory interface for creating NaverMap providers.
|
|
133
|
+
* Each call to createProvider() should return a new instance.
|
|
134
|
+
*
|
|
135
|
+
* Brownfield apps can implement this interface to provide their own map implementation.
|
|
136
|
+
*/
|
|
137
|
+
interface GraniteNaverMapProviderFactory {
|
|
138
|
+
/**
|
|
139
|
+
* Create a new provider instance.
|
|
140
|
+
* This should be called for each NaverMap view.
|
|
141
|
+
*/
|
|
142
|
+
fun createProvider(context: Context): GraniteNaverMapProvider
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Pluggable Provider interface for NaverMap
|
|
147
|
+
*
|
|
148
|
+
* Brownfield apps can implement this interface to use their own map implementation.
|
|
149
|
+
* Note: Each view should have its own Provider instance (created via Factory).
|
|
150
|
+
*/
|
|
151
|
+
interface GraniteNaverMapProvider {
|
|
152
|
+
/**
|
|
153
|
+
* Create the map container view
|
|
154
|
+
*/
|
|
155
|
+
fun createMapView(context: Context): View
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Set the delegate for map events
|
|
159
|
+
*/
|
|
160
|
+
fun setDelegate(delegate: GraniteNaverMapProviderDelegate?)
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Called when the view is attached to window
|
|
164
|
+
*/
|
|
165
|
+
fun onAttachedToWindow()
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Called when the view is detached from window
|
|
169
|
+
*/
|
|
170
|
+
fun onDetachedFromWindow()
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Called when the view size changes
|
|
174
|
+
*/
|
|
175
|
+
fun onSizeChanged(width: Int, height: Int)
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Called on host resume
|
|
179
|
+
*/
|
|
180
|
+
fun onHostResume()
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Called on host pause
|
|
184
|
+
*/
|
|
185
|
+
fun onHostPause()
|
|
186
|
+
|
|
187
|
+
// MARK: - Camera
|
|
188
|
+
|
|
189
|
+
fun moveCamera(position: GraniteNaverMapCameraPosition, animated: Boolean)
|
|
190
|
+
fun animateToCoordinate(coordinate: GraniteNaverMapCoordinate)
|
|
191
|
+
fun animateToBounds(bounds: GraniteNaverMapBounds, padding: Int)
|
|
192
|
+
|
|
193
|
+
// MARK: - Map Properties
|
|
194
|
+
|
|
195
|
+
fun setMapType(type: GraniteNaverMapType)
|
|
196
|
+
fun setMapPadding(top: Int, left: Int, bottom: Int, right: Int)
|
|
197
|
+
fun setCompassEnabled(enabled: Boolean)
|
|
198
|
+
fun setScaleBarEnabled(enabled: Boolean)
|
|
199
|
+
fun setZoomControlEnabled(enabled: Boolean)
|
|
200
|
+
fun setLocationButtonEnabled(enabled: Boolean)
|
|
201
|
+
fun setBuildingHeight(height: Float)
|
|
202
|
+
fun setNightModeEnabled(enabled: Boolean)
|
|
203
|
+
fun setMinZoomLevel(level: Double)
|
|
204
|
+
fun setMaxZoomLevel(level: Double)
|
|
205
|
+
fun setScrollGesturesEnabled(enabled: Boolean)
|
|
206
|
+
fun setZoomGesturesEnabled(enabled: Boolean)
|
|
207
|
+
fun setTiltGesturesEnabled(enabled: Boolean)
|
|
208
|
+
fun setRotateGesturesEnabled(enabled: Boolean)
|
|
209
|
+
fun setStopGesturesEnabled(enabled: Boolean)
|
|
210
|
+
fun setLocationTrackingMode(mode: GraniteNaverMapLocationTrackingMode)
|
|
211
|
+
fun setLayerGroupEnabled(group: String, enabled: Boolean)
|
|
212
|
+
|
|
213
|
+
// MARK: - Markers
|
|
214
|
+
|
|
215
|
+
fun addMarker(data: GraniteNaverMapMarkerData)
|
|
216
|
+
fun updateMarker(data: GraniteNaverMapMarkerData)
|
|
217
|
+
fun removeMarker(identifier: String)
|
|
218
|
+
|
|
219
|
+
// MARK: - Polylines
|
|
220
|
+
|
|
221
|
+
fun addPolyline(data: GraniteNaverMapPolylineData)
|
|
222
|
+
fun updatePolyline(data: GraniteNaverMapPolylineData)
|
|
223
|
+
fun removePolyline(identifier: String)
|
|
224
|
+
|
|
225
|
+
// MARK: - Polygons
|
|
226
|
+
|
|
227
|
+
fun addPolygon(data: GraniteNaverMapPolygonData)
|
|
228
|
+
fun updatePolygon(data: GraniteNaverMapPolygonData)
|
|
229
|
+
fun removePolygon(identifier: String)
|
|
230
|
+
|
|
231
|
+
// MARK: - Circles
|
|
232
|
+
|
|
233
|
+
fun addCircle(data: GraniteNaverMapCircleData)
|
|
234
|
+
fun updateCircle(data: GraniteNaverMapCircleData)
|
|
235
|
+
fun removeCircle(identifier: String)
|
|
236
|
+
|
|
237
|
+
// MARK: - Paths
|
|
238
|
+
|
|
239
|
+
fun addPath(data: GraniteNaverMapPathData)
|
|
240
|
+
fun updatePath(data: GraniteNaverMapPathData)
|
|
241
|
+
fun removePath(identifier: String)
|
|
242
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
package run.granite.navermap
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Type alias for provider creation lambda
|
|
7
|
+
*/
|
|
8
|
+
typealias GraniteNaverMapProviderCreator = (Context) -> GraniteNaverMapProvider
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Internal wrapper to adapt lambda to factory interface
|
|
12
|
+
*/
|
|
13
|
+
private class LambdaProviderFactory(
|
|
14
|
+
private val creator: GraniteNaverMapProviderCreator
|
|
15
|
+
) : GraniteNaverMapProviderFactory {
|
|
16
|
+
override fun createProvider(context: Context): GraniteNaverMapProvider {
|
|
17
|
+
return creator(context)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Registry singleton for NaverMap provider factories
|
|
23
|
+
*
|
|
24
|
+
* Brownfield apps can register their own provider factory at app startup.
|
|
25
|
+
* If no factory is registered and the default provider is included, the built-in
|
|
26
|
+
* NMapsMap provider factory will be used.
|
|
27
|
+
*
|
|
28
|
+
* Usage:
|
|
29
|
+
* ```kotlin
|
|
30
|
+
* // In your Application.onCreate() or before using NaverMap:
|
|
31
|
+
* GraniteNaverMapRegistry.register { context ->
|
|
32
|
+
* MyNaverMapProvider(context)
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
object GraniteNaverMapRegistry {
|
|
37
|
+
private var _factory: GraniteNaverMapProviderFactory? = null
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The currently registered factory
|
|
41
|
+
*/
|
|
42
|
+
val factory: GraniteNaverMapProviderFactory?
|
|
43
|
+
get() = _factory
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Register a provider using a lambda. Call this at app startup before using NaverMap.
|
|
47
|
+
* This is the preferred Kotlin API.
|
|
48
|
+
*
|
|
49
|
+
* Usage:
|
|
50
|
+
* ```kotlin
|
|
51
|
+
* GraniteNaverMapRegistry.register { context ->
|
|
52
|
+
* MyNaverMapProvider(context)
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
fun register(creator: GraniteNaverMapProviderCreator) {
|
|
57
|
+
_factory = LambdaProviderFactory(creator)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Register a custom provider factory. Call this at app startup before using NaverMap.
|
|
62
|
+
* This API is provided for Java compatibility.
|
|
63
|
+
*/
|
|
64
|
+
fun register(factory: GraniteNaverMapProviderFactory) {
|
|
65
|
+
_factory = factory
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Create a new provider instance for a NaverMap view.
|
|
70
|
+
* Each view should call this to get its own provider instance.
|
|
71
|
+
*
|
|
72
|
+
* @return A new provider instance, or null if no factory is registered and default provider is not included
|
|
73
|
+
*/
|
|
74
|
+
fun createProvider(context: Context): GraniteNaverMapProvider? {
|
|
75
|
+
// Use registered factory if available
|
|
76
|
+
_factory?.let { return it.createProvider(context) }
|
|
77
|
+
|
|
78
|
+
// Only try to create built-in provider if it's included in the build
|
|
79
|
+
if (BuildConfig.INCLUDE_DEFAULT_PROVIDER) {
|
|
80
|
+
return createBuiltInProviderFactory()?.createProvider(context)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Create built-in provider factory using reflection to avoid compile-time dependency
|
|
88
|
+
*/
|
|
89
|
+
private fun createBuiltInProviderFactory(): GraniteNaverMapProviderFactory? {
|
|
90
|
+
return try {
|
|
91
|
+
val clazz = Class.forName("run.granite.navermap.builtinProvider.BuiltInGraniteNaverMapProviderFactory")
|
|
92
|
+
clazz.getDeclaredConstructor().newInstance() as GraniteNaverMapProviderFactory
|
|
93
|
+
} catch (e: Exception) {
|
|
94
|
+
null
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Check if a custom factory has been registered
|
|
100
|
+
*/
|
|
101
|
+
val hasCustomFactory: Boolean
|
|
102
|
+
get() = _factory != null
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Check if the default provider is available in this build
|
|
106
|
+
*/
|
|
107
|
+
val hasDefaultProvider: Boolean
|
|
108
|
+
get() = BuildConfig.INCLUDE_DEFAULT_PROVIDER
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Reset the factory (useful for testing)
|
|
112
|
+
*/
|
|
113
|
+
fun reset() {
|
|
114
|
+
_factory = null
|
|
115
|
+
}
|
|
116
|
+
}
|