Installed leaflet in extlib
[mediagoblin.git] / extlib / leaflet / src / layer / vector / Polyline.js
diff --git a/extlib/leaflet/src/layer/vector/Polyline.js b/extlib/leaflet/src/layer/vector/Polyline.js
new file mode 100644 (file)
index 0000000..606d7d7
--- /dev/null
@@ -0,0 +1,112 @@
+\r
+L.Polyline = L.Path.extend({\r
+       initialize: function(latlngs, options) {\r
+               L.Path.prototype.initialize.call(this, options);\r
+               this._latlngs = latlngs;\r
+       },\r
+       \r
+       options: {\r
+               // how much to simplify the polyline on each zoom level\r
+               // more = better performance and smoother look, less = more accurate\r
+               smoothFactor: 1.0,\r
+               noClip: false,\r
+               \r
+               updateOnMoveEnd: true\r
+       },\r
+       \r
+       projectLatlngs: function() {\r
+               this._originalPoints = [];\r
+               \r
+               for (var i = 0, len = this._latlngs.length; i < len; i++) {\r
+                       this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);\r
+               }\r
+       },\r
+       \r
+       getPathString: function() {\r
+               for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {\r
+                       str += this._getPathPartStr(this._parts[i]);\r
+               }\r
+               return str;\r
+       },\r
+       \r
+       getLatLngs: function() {\r
+               return this._latlngs;\r
+       },\r
+       \r
+       setLatLngs: function(latlngs) {\r
+               this._latlngs = latlngs;\r
+               this._redraw();\r
+               return this;\r
+       },\r
+       \r
+       addLatLng: function(latlng) {\r
+               this._latlngs.push(latlng);\r
+               this._redraw();\r
+               return this;\r
+       },\r
+       \r
+       spliceLatLngs: function(index, howMany) {\r
+               var removed = [].splice.apply(this._latlngs, arguments);\r
+               this._redraw();\r
+               return removed;\r
+       },\r
+       \r
+       _getPathPartStr: function(points) {\r
+               var round = L.Path.VML;\r
+               \r
+               for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {\r
+                       p = points[j];\r
+                       if (round) p._round();\r
+                       str += (j ? 'L' : 'M') + p.x + ' ' + p.y;\r
+               }\r
+               return str;\r
+       },\r
+       \r
+       _clipPoints: function() {\r
+               var points = this._originalPoints,\r
+                       len = points.length,\r
+                       i, k, segment;\r
+\r
+               if (this.options.noClip) {\r
+                       this._parts = [points];\r
+                       return;\r
+               }\r
+               \r
+               this._parts = [];\r
+               \r
+               var parts = this._parts,\r
+                       vp = this._map._pathViewport,\r
+                       lu = L.LineUtil;\r
+               \r
+               for (i = 0, k = 0; i < len - 1; i++) {\r
+                       segment = lu.clipSegment(points[i], points[i+1], vp, i);\r
+                       if (!segment) continue;\r
+                       \r
+                       parts[k] = parts[k] || [];\r
+                       parts[k].push(segment[0]);\r
+                       \r
+                       // if segment goes out of screen, or it's the last one, it's the end of the line part\r
+                       if ((segment[1] != points[i+1]) || (i == len - 2)) {\r
+                               parts[k].push(segment[1]);\r
+                               k++;  \r
+                       }\r
+               }\r
+       },\r
+       \r
+       // simplify each clipped part of the polyline\r
+       _simplifyPoints: function() {\r
+               var parts = this._parts,\r
+                       lu = L.LineUtil;\r
+               \r
+               for (var i = 0, len = parts.length; i < len; i++) {\r
+                       parts[i] = lu.simplify(parts[i], this.options.smoothFactor);\r
+               }\r
+       },\r
+       \r
+       _updatePath: function() {\r
+               this._clipPoints();\r
+               this._simplifyPoints();\r
+               \r
+               L.Path.prototype._updatePath.call(this);\r
+       }\r
+});
\ No newline at end of file