派生自 wuyushui/SewerAndRainNetwork

YANGDL
2021-01-05 1820aef3fb5c926664de1d4d484f64a5c9ba7099
src/components/plugin/PathDrag.js
@@ -1,143 +1,143 @@
'use strict'
const init = (L) => {
    /* A Draggable that does not update the element position
  /* A Draggable that does not update the element position
    and takes care of only bubbling to targetted path in Canvas mode. */
    L.PathDraggable = L.Draggable.extend({
  L.PathDraggable = L.Draggable.extend({
        initialize: function(path) {
            this._path = path
            this._canvas = (path._map.getRenderer(path) instanceof L.Canvas)
            let element = this._canvas ? this._path._map.getRenderer(this._path)._container : this._path._path
            L.Draggable.prototype.initialize.call(this, element, element, true)
        },
    initialize: function (path) {
      this._path = path
      this._canvas = (path._map.getRenderer(path) instanceof L.Canvas)
      const element = this._canvas ? this._path._map.getRenderer(this._path)._container : this._path._path
      L.Draggable.prototype.initialize.call(this, element, element, true)
    },
        _updatePosition: function() {
            let e = { originalEvent: this._lastEvent }
            this.fire('drag', e)
        },
    _updatePosition: function () {
      const e = { originalEvent: this._lastEvent }
      this.fire('drag', e)
    },
        _onDown: function(e) {
            let first = e.touches ? e.touches[0] : e
            this._startPoint = new L.Point(first.clientX, first.clientY)
            if (this._canvas && !this._path._containsPoint(this._path._map.mouseEventToLayerPoint(first))) {
                return
            }
            L.Draggable.prototype._onDown.call(this, e)
    _onDown: function (e) {
      const first = e.touches ? e.touches[0] : e
      this._startPoint = new L.Point(first.clientX, first.clientY)
      if (this._canvas && !this._path._containsPoint(this._path._map.mouseEventToLayerPoint(first))) {
        return
      }
      L.Draggable.prototype._onDown.call(this, e)
    }
  })
  L.Handler.PathDrag = L.Handler.extend({
    initialize: function (path) {
      this._path = path
    },
    getEvents: function () {
      return {
        dragstart: this._onDragStart,
        drag: this._onDrag,
        dragend: this._onDragEnd
      }
    },
    addHooks: function () {
      if (!this._draggable) {
        this._draggable = new L.PathDraggable(this._path)
      }
      this._draggable.on(this.getEvents(), this).enable()
      L.DomUtil.addClass(this._draggable._element, 'leaflet-path-draggable')
    },
    removeHooks: function () {
      this._draggable.off(this.getEvents(), this).disable()
      L.DomUtil.removeClass(this._draggable._element, 'leaflet-path-draggable')
    },
    moved: function () {
      return this._draggable && this._draggable._moved
    },
    _onDragStart: function () {
      this._startPoint = this._draggable._startPoint
      this._path
        .closePopup()
        .fire('movestart')
        .fire('dragstart')
    },
    _onDrag: function (e) {
      const path = this._path
      const event = (e.originalEvent.touches && e.originalEvent.touches.length === 1 ? e.originalEvent.touches[0] : e.originalEvent)
      const newPoint = L.point(event.clientX, event.clientY)
      const latlng = path._map.layerPointToLatLng(newPoint)
      this._offset = newPoint.subtract(this._startPoint)
      this._startPoint = newPoint
      this._path.eachLatLng(this.updateLatLng, this)
      path.redraw()
      e.latlng = latlng
      e.offset = this._offset
      path.fire('drag', e)
      e.latlng = this._path.getCenter ? this._path.getCenter() : this._path.getLatLng()
      path.fire('move', e)
    },
    _onDragEnd: function (e) {
      if (this._path._bounds) this.resetBounds()
      this._path.fire('moveend')
        .fire('dragend', e)
    },
    latLngToLayerPoint: function (latlng) {
      // Same as map.latLngToLayerPoint, but without the round().
      const projectedPoint = this._path._map.project(L.latLng(latlng))
      return projectedPoint._subtract(this._path._map.getPixelOrigin())
    },
    updateLatLng: function (latlng) {
      const oldPoint = this.latLngToLayerPoint(latlng)
      oldPoint._add(this._offset)
      const newLatLng = this._path._map.layerPointToLatLng(oldPoint)
      latlng.lat = newLatLng.lat
      latlng.lng = newLatLng.lng
    },
    resetBounds: function () {
      this._path._bounds = new L.LatLngBounds()
      this._path.eachLatLng(function (latlng) {
        this._bounds.extend(latlng)
      })
    }
  })
  L.Path.include({
    eachLatLng: function (callback, context) {
      context = context || this
      const loop = function (latlngs) {
        for (let i = 0; i < latlngs.length; i++) {
          if (L.Util.isArray(latlngs[i])) loop(latlngs[i])
          else callback.call(context, latlngs[i])
        }
      }
      loop(this.getLatLngs ? this.getLatLngs() : [this.getLatLng()])
    }
    })
  })
    L.Handler.PathDrag = L.Handler.extend({
        initialize: function(path) {
            this._path = path
        },
        getEvents: function() {
            return {
                dragstart: this._onDragStart,
                drag: this._onDrag,
                dragend: this._onDragEnd
            }
        },
        addHooks: function() {
            if (!this._draggable) {
                this._draggable = new L.PathDraggable(this._path)
            }
            this._draggable.on(this.getEvents(), this).enable()
            L.DomUtil.addClass(this._draggable._element, 'leaflet-path-draggable')
        },
        removeHooks: function() {
            this._draggable.off(this.getEvents(), this).disable()
            L.DomUtil.removeClass(this._draggable._element, 'leaflet-path-draggable')
        },
        moved: function() {
            return this._draggable && this._draggable._moved
        },
        _onDragStart: function() {
            this._startPoint = this._draggable._startPoint
            this._path
                .closePopup()
                .fire('movestart')
                .fire('dragstart')
        },
        _onDrag: function(e) {
            let path = this._path
            let event = (e.originalEvent.touches && e.originalEvent.touches.length === 1 ? e.originalEvent.touches[0] : e.originalEvent)
            let newPoint = L.point(event.clientX, event.clientY)
            let latlng = path._map.layerPointToLatLng(newPoint)
            this._offset = newPoint.subtract(this._startPoint)
            this._startPoint = newPoint
            this._path.eachLatLng(this.updateLatLng, this)
            path.redraw()
            e.latlng = latlng
            e.offset = this._offset
            path.fire('drag', e)
            e.latlng = this._path.getCenter ? this._path.getCenter() : this._path.getLatLng()
            path.fire('move', e)
        },
        _onDragEnd: function(e) {
            if (this._path._bounds) this.resetBounds()
            this._path.fire('moveend')
                .fire('dragend', e)
        },
        latLngToLayerPoint: function(latlng) {
            // Same as map.latLngToLayerPoint, but without the round().
            let projectedPoint = this._path._map.project(L.latLng(latlng))
            return projectedPoint._subtract(this._path._map.getPixelOrigin())
        },
        updateLatLng: function(latlng) {
            let oldPoint = this.latLngToLayerPoint(latlng)
            oldPoint._add(this._offset)
            let newLatLng = this._path._map.layerPointToLatLng(oldPoint)
            latlng.lat = newLatLng.lat
            latlng.lng = newLatLng.lng
        },
        resetBounds: function() {
            this._path._bounds = new L.LatLngBounds()
            this._path.eachLatLng(function(latlng) {
                this._bounds.extend(latlng)
            })
        }
    })
    L.Path.include({
        eachLatLng: function(callback, context) {
            context = context || this
            let loop = function(latlngs) {
                for (let i = 0; i < latlngs.length; i++) {
                    if (L.Util.isArray(latlngs[i])) loop(latlngs[i])
                    else callback.call(context, latlngs[i])
                }
            }
            loop(this.getLatLngs ? this.getLatLngs() : [this.getLatLng()])
        }
    })
    L.Path.addInitHook(function() {
        this.dragging = new L.Handler.PathDrag(this)
        if (this.options.draggable) {
            this.once('add', function() {
                this.dragging.enable()
            })
        }
    })
  L.Path.addInitHook(function () {
    this.dragging = new L.Handler.PathDrag(this)
    if (this.options.draggable) {
      this.once('add', function () {
        this.dragging.enable()
      })
    }
  })
}
export default {
    init
  init
}