Leaflet: simple plugin: leaflet 1.0.0 b2

by Leo

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.0-beta.2/leaflet-src.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.0-beta.2/leaflet.css">
<body>
<button type="btn1" id="addListenerButton">Add listener</button>
<button type="btn2" id="removeListenerButton">Remove listener</button>
<div id="mapWrapper">
  <div id="map" ></div>
</div>
</body>

CSS

html, body, #map {
        margin: 0;
        width: 600px;
        height: 500px;
}

#mapWrapper
{
  padding: 10px;
  margin: 10px;
  width: 100%;
  height: 100%;
}

JavaScript

//////////////////////// BEGIN PLUGIN //////////////////////////
L.Marker.addInitHook(function ()
{
  function polygonContains(point, vs) {

      var x = point[0], y = point[1];

      var inside = false;
      for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
        var xi = vs[i][0], yi = vs[i][1];
        var xj = vs[j][0], yj = vs[j][1];

        var intersect = ((yi > y) != (yj > y))
          && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
        if (intersect) inside = !inside;
      }

      return inside;
     }
     
      function prepareShapeCoordinates(cs) {
        var shapeCoordinates = [];
        if (typeof cs[0] === "number") {
            if (cs.length % 2 != 0) {
                throw new Error("Length of passed coordinates array should be even");
            }
            for (var i = 0; i < cs.length / 2; i++) {
                shapeCoordinates[i] = [cs[2 * i], cs[2 * i + 1]];
            }
        }
        else {
            shapeCoordinates = cs;
        }
        return shapeCoordinates;
    }
    
        if (!this.options.shapeCoordinates) {
            return;
        }
        var preparedShapeCoordinates = prepareShapeCoordinates(this.options.shapeCoordinates);
        var options = this.options;
        options.shapeCoordinates = preparedShapeCoordinates;
        var thisMarker = this;

    //wrap listener
   function createListenerWrapper(listener) {
            return function (event) {
                var marker = (event.target);
                var shapeCoordinates = marker.options.shapeCoordinates;
                var originalEvent = event.originalEvent;
                var offsetX = originalEvent.offsetX;
                var offsetY = originalEvent.offsetY;
                debugger;
                if (!polygonContains([offsetX, offsetY], shapeCoordinates)) {
                    return;
                }
                
                listener(event);
            };
        }
    var delegatingOnFunction =...