provider.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /**
  2. * DevExtreme (ui/map/provider.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var Promise = require("../../core/polyfills/promise");
  11. var Class = require("../../core/class");
  12. var map = require("../../core/utils/iterator").map;
  13. var typeUtils = require("../../core/utils/type");
  14. var eventUtils = require("../../events/utils");
  15. var isPlainObject = typeUtils.isPlainObject;
  16. var isNumeric = typeUtils.isNumeric;
  17. var abstract = Class.abstract;
  18. var Provider = Class.inherit({
  19. _defaultRouteWeight: function() {
  20. return 5
  21. },
  22. _defaultRouteOpacity: function() {
  23. return .5
  24. },
  25. _defaultRouteColor: function() {
  26. return "#0000FF"
  27. },
  28. ctor: function(map, $container) {
  29. this._mapWidget = map;
  30. this._$container = $container
  31. },
  32. render: function(markerOptions, routeOptions) {
  33. return this._renderImpl().then(function() {
  34. return Promise.all([this._applyFunctionIfNeeded("addMarkers", markerOptions), this._applyFunctionIfNeeded("addRoutes", routeOptions)]).then(function() {
  35. return true
  36. })
  37. }.bind(this))
  38. },
  39. _renderImpl: abstract,
  40. updateDimensions: abstract,
  41. updateMapType: abstract,
  42. updateBounds: abstract,
  43. updateCenter: abstract,
  44. updateZoom: abstract,
  45. updateControls: abstract,
  46. updateMarkers: function(markerOptionsToRemove, markerOptionsToAdd) {
  47. return new Promise(function(resolve) {
  48. return this._applyFunctionIfNeeded("removeMarkers", markerOptionsToRemove).then(function(removeValue) {
  49. this._applyFunctionIfNeeded("addMarkers", markerOptionsToAdd).then(function(addValue) {
  50. resolve(addValue ? addValue : removeValue)
  51. })
  52. }.bind(this))
  53. }.bind(this))
  54. },
  55. addMarkers: abstract,
  56. removeMarkers: abstract,
  57. adjustViewport: abstract,
  58. updateRoutes: function(routeOptionsToRemove, routeOptionsToAdd) {
  59. return new Promise(function(resolve) {
  60. return this._applyFunctionIfNeeded("removeRoutes", routeOptionsToRemove).then(function(removeValue) {
  61. this._applyFunctionIfNeeded("addRoutes", routeOptionsToAdd).then(function(addValue) {
  62. resolve(addValue ? addValue : removeValue)
  63. })
  64. }.bind(this))
  65. }.bind(this))
  66. },
  67. addRoutes: abstract,
  68. removeRoutes: abstract,
  69. clean: abstract,
  70. map: function() {
  71. return this._map
  72. },
  73. isEventsCanceled: function() {
  74. return false
  75. },
  76. _option: function(name, value) {
  77. if (void 0 === value) {
  78. return this._mapWidget.option(name)
  79. }
  80. this._mapWidget.setOptionSilent(name, value)
  81. },
  82. _keyOption: function(providerName) {
  83. var key = this._option("key");
  84. return void 0 === key[providerName] ? key : key[providerName]
  85. },
  86. _parseTooltipOptions: function(option) {
  87. return {
  88. text: option.text || option,
  89. visible: option.isShown || false
  90. }
  91. },
  92. _getLatLng: function(location) {
  93. if ("string" === typeof location) {
  94. var coords = map(location.split(","), function(item) {
  95. return item.trim()
  96. });
  97. var numericRegex = /^[-+]?[0-9]*\.?[0-9]*$/;
  98. if (2 === coords.length && coords[0].match(numericRegex) && coords[1].match(numericRegex)) {
  99. return {
  100. lat: parseFloat(coords[0]),
  101. lng: parseFloat(coords[1])
  102. }
  103. }
  104. } else {
  105. if (Array.isArray(location) && 2 === location.length) {
  106. return {
  107. lat: location[0],
  108. lng: location[1]
  109. }
  110. } else {
  111. if (isPlainObject(location) && isNumeric(location.lat) && isNumeric(location.lng)) {
  112. return location
  113. }
  114. }
  115. }
  116. return null
  117. },
  118. _areBoundsSet: function() {
  119. return this._option("bounds.northEast") && this._option("bounds.southWest")
  120. },
  121. _addEventNamespace: function(name) {
  122. return eventUtils.addNamespace(name, this._mapWidget.NAME)
  123. },
  124. _applyFunctionIfNeeded: function(fnName, array) {
  125. if (!array.length) {
  126. return Promise.resolve()
  127. }
  128. return this[fnName](array)
  129. },
  130. _fireAction: function(name, actionArguments) {
  131. this._mapWidget._createActionByOption(name)(actionArguments)
  132. },
  133. _fireClickAction: function(actionArguments) {
  134. this._fireAction("onClick", actionArguments)
  135. },
  136. _fireMarkerAddedAction: function(actionArguments) {
  137. this._fireAction("onMarkerAdded", actionArguments)
  138. },
  139. _fireMarkerRemovedAction: function(actionArguments) {
  140. this._fireAction("onMarkerRemoved", actionArguments)
  141. },
  142. _fireRouteAddedAction: function(actionArguments) {
  143. this._fireAction("onRouteAdded", actionArguments)
  144. },
  145. _fireRouteRemovedAction: function(actionArguments) {
  146. this._fireAction("onRouteRemoved", actionArguments)
  147. }
  148. });
  149. module.exports = Provider;