[Agriculture Domain] (#11663)
* created Soil Analysis, Water Analysis, Weather and Fertilizer doctype
* soil doctype edited and crop doctype added
* minor stuff
* Land Unit + Leaflet
* crop cycle added
* Land Unit changes + Crop cycle
* autoname for plant_analysis
* created Agriculture Task
* minor stuff
* - deleted agriculture_task
- current state after the call
* [Agriculture] modified fertilizer doctype to have a link to Item
This was done so that the `Fertilizer` doctype could track the contents exclusive to the fertilizer, whereas the `Fertilizer Item` could be a seperate entity, so as to leverage the existing ERPNext doctypes
* Added fields to `Water Analysis` doctype
- Collection Datetime
- Laboratory Testing Datetime
- Results Datetime (default to Laboratory Testing Datetime)
* Edited the doctypes `Agrivulture Task`, `Pest` and `Soil Texture`
- Created `agriculture task` doctype
- added fields `Common Name`, `Scientific Name`, `Treatment` and `Treatment Options` to `Pest` doctype
- edited `Soil Texture` doctype to contain a soil texture ternary plot diagram made using SnapSVG. The code was put in public folder so as to be accessible by the entire agriculture module
* Recursively reflect child land unit feature changes on parents
* fixed feature repition bug
* added legeneds to ternary plot
* added stuff
* changes
* fix Task
* reverted the Task Doctype to have naming in the form TASK.#####
* fixed modifications made to TASK doctype
* [dirty commit] added auto create Task from Crop on creation of Crop Cycle
* Changed the Crop Cycle Doctype
- Deleted the "Crop Cycly Task" doctype and its link from "Crop Cycle"
- Creation of a new Project with the same name as the Crop Cycle on creation of a new Crop Cycle
- Creation of all the tasks imported from Agriculture Task doctype of the Crop in the Crop Cycle
* [Agriculture Module] Modifications
- Created childtable doctype "Pest Detected"
- Added childtable "Pest Detected" to Pest
- Modified "Agriculture Task" to include "Start Day" and "End Day" of task
- Modified the code in "Crop Cycle" to create a parent task with same name as Crop Cycle
* [Agriculture Module] fixed Pest doctype not saving issue
* [Agrcilture Module] Changes in Crop Cycle
- removed the creation of a master task on creation of a new crop cycle
- temporary fix to add the pest tasks from the pests added in crop cycle
* land_unit_tree.js fields modified to have field objects instead of just field names
* Revert "land_unit_tree.js modified"
* land_unit_tree.js fields modified to have field objects instead of just field names
* [Agriculture Domain] Converted Agriculture Module to a Domain
- Converted into a Domain field from Select to Link field in Company doctype, linked to Domain doctype
- Agriculture (alpha) is now a Domain
* land_unit area aggregation enabled
* land_unit.py checks feature diff for every ancestor and not just the parent
* Removed unnecessary print messages
* agriculture.py modified to include fixtures
* fixtures added to setup.py inside agriculture module
* [Agriculture Domain] UI tests added
- 'materials' table renamed to 'materials_required' in 'Crop'
- wrote UI test for Crop, Fertilizer, Crop Cycle, Pest, Water Analysis, Soil Texture
- moved creation of tasks from client side to server side in Crop Cycle
- Plant Analysis, Water Analysis, Soil Analysis, Soil Texture docs are now autonamed in the format PAnalysis.#####, WAnalysis.#####, SAnalysis.#####, STexture.##### respectively
- company_name changed in domains.py from 'Schrute Farms.' to 'Schrute Farms'
* [Agriculture Domain] Mostly written server side tests and moved client side code to server side
- moved client side code to server side for Crop, Water Analysis, Pest, Soil Texture,
- wrote server side tests for Crop, Crop Cycle, Fertilizer, Soil Texture, Pest
- NOTE: none of the server side codes were tested
* [Agriculture Domain] All server side tests working locally
* [Agriculture Domain] Testing
- added sample test for Land Unit, which needs to be modified to test multiple things
- modified tests to be independant of each other
* Land Units tests added and area aggregation code migrated to server side
* added land_unit server side tests and on_trash added to land_unit
* Changing field location for start date
* [Agriculture Domain] deleted unnecessary comments
* [Agriculture Domain] reverted changes
* [Agriculture Domain] Modified the code to replace Pest doctype with Land Unit doctype
- Deleted the Pest doctype and replaced it with the more generic Disease doctype
- Deleted the Detected Pest doctype and replaced it with Detected Disease doctype
* [Agriculture Domain] resolves #11654, resolves #11653
* [Agriculture] Added links to soil analysis, soil texture, plant analysis in crop cycle and land unit
- not working perfectly yet
- docs are fetched but not appended
* [Agricuture] Crop Cycle modifed to link with relevent analysis docs, not fully functional
* [Agriculture] added seperate stage for client side agriculture tests
* [Agriculture] minor modification to crop_cycle.js test
* [Agriculture] fixed tests
* upgrade chromedriver in .travis.yml from 2.32 to 2.33
* [Agriculture] added land unit ui test
* [Agriculture] added Agriculture server side test as a seperate stage in travis
* tesing travis.yml
* [Agriculture] Crop Cycle is able to fetch linked analysis docs
* Modified travis.yml for modular server side testing
* [minor fix][Agriculture] in soil_texture
- fixed multiple soil_texture ternary plot creation on refresh
- fixed error on soil composition change
* Update .travis.yml
* removed location field from linked doctypes
* minor fixes and cleanup of agri
* minor fix in agriculture and domain patches
* permissions added to agriculture
- Agriculture Manager and Agriculture User roles were added to all Agriculture doctypes
* [Agriculture]
- Created Agiculture Analysis Criteria and added sample records to it
- All the analysis doctypes now fetch their fields inside a child table, form Agriculture Analysis Criteria
- Also Fertilizer does the same
This was introduced so that, new parameters could be added on demand
* minor changes requested in Agriculture
* minor changes
* minor fix
* Update desktop.py
* Update .travis.yml
2017-12-06 13:06:27 +00:00
/ *
Leaflet . draw , a plugin that adds drawing and editing tools to Leaflet powered maps .
( c ) 2012 - 2013 , Jacob Toye , Smartrak
https : //github.com/Leaflet/Leaflet.draw
http : //leafletjs.com
https : //github.com/jacobtoye
* /
! function ( t , e ) {
L . drawVersion = "0.2.3" , L . drawLocal = { draw : { toolbar : { actions : { title : "Cancel drawing" , text : "Cancel" } , undo : { title : "Delete last point drawn" , text : "Delete last point" } , buttons : { polyline : "Draw a polyline" , polygon : "Draw a polygon" , rectangle : "Draw a rectangle" , circle : "Draw a circle" , marker : "Draw a marker" } } , handlers : { circle : { tooltip : { start : "Click and drag to draw circle." } } , marker : { tooltip : { start : "Click map to place marker." } } , polygon : { tooltip : { start : "Click to start drawing shape." , cont : "Click to continue drawing shape." , end : "Click first point to close this shape." } } , polyline : { error : "<strong>Error:</strong> shape edges cannot cross!" , tooltip : { start : "Click to start drawing line." , cont : "Click to continue drawing line." , end : "Click last point to finish line." } } , rectangle : { tooltip : { start : "Click and drag to draw rectangle." } } , simpleshape : { tooltip : { end : "Release mouse to finish drawing." } } } } , edit : { toolbar : { actions : { save : { title : "Save changes." , text : "Save" } , cancel : { title : "Cancel editing, discards all changes." , text : "Cancel" } } , buttons : { edit : "Edit layers." , editDisabled : "No layers to edit." , remove : "Delete layers." , removeDisabled : "No layers to delete." } } , handlers : { edit : { tooltip : { text : "Drag handles, or marker to edit feature." , subtext : "Click cancel to undo changes." } } , remove : { tooltip : { text : "Click on a feature to remove" } } } } } , L . Draw = { } , L . Draw . Feature = L . Handler . extend ( { includes : L . Mixin . Events , initialize : function ( t , e ) { this . _map = t , this . _container = t . _container , this . _overlayPane = t . _panes . overlayPane , this . _popupPane = t . _panes . popupPane , e && e . shapeOptions && ( e . shapeOptions = L . Util . extend ( { } , this . options . shapeOptions , e . shapeOptions ) ) , L . setOptions ( this , e ) } , enable : function ( ) { this . _enabled || ( this . fire ( "enabled" , { handler : this . type } ) , this . _map . fire ( "draw:drawstart" , { layerType : this . type } ) , L . Handler . prototype . enable . call ( this ) ) } , disable : function ( ) { this . _enabled && ( L . Handler . prototype . disable . call ( this ) , this . _map . fire ( "draw:drawstop" , { layerType : this . type } ) , this . fire ( "disabled" , { handler : this . type } ) ) } , addHooks : function ( ) { var t = this . _map ;
t && ( L . DomUtil . disableTextSelection ( ) , t . getContainer ( ) . focus ( ) , this . _tooltip = new L . Tooltip ( this . _map ) , L . DomEvent . on ( this . _container , "keyup" , this . _cancelDrawing , this ) ) } , removeHooks : function ( ) { this . _map && ( L . DomUtil . enableTextSelection ( ) , this . _tooltip . dispose ( ) , this . _tooltip = null , L . DomEvent . off ( this . _container , "keyup" , this . _cancelDrawing , this ) ) } , setOptions : function ( t ) { L . setOptions ( this , t ) } , _fireCreatedEvent : function ( t ) { this . _map . fire ( "draw:created" , { layer : t , layerType : this . type } ) } , _cancelDrawing : function ( t ) { 27 === t . keyCode && this . disable ( ) } } ) , L . Draw . Polyline = L . Draw . Feature . extend ( { statics : { TYPE : "polyline" } , Poly : L . Polyline , options : { allowIntersection : ! 0 , repeatMode : ! 1 , drawError : { color : "#b00b00" , timeout : 2500 } , icon : new L . DivIcon ( { iconSize : new L . Point ( 8 , 8 ) , className : "leaflet-div-icon leaflet-editing-icon" } ) , guidelineDistance : 20 , maxGuideLineLength : 4e3 , shapeOptions : { stroke : ! 0 , color : "#f06eaa" , weight : 4 , opacity : . 5 , fill : ! 1 , clickable : ! 0 } , metric : ! 0 , showLength : ! 0 , zIndexOffset : 2e3 } , initialize : function ( t , e ) { this . options . drawError . message = L . drawLocal . draw . handlers . polyline . error , e && e . drawError && ( e . drawError = L . Util . extend ( { } , this . options . drawError , e . drawError ) ) , this . type = L . Draw . Polyline . TYPE , L . Draw . Feature . prototype . initialize . call ( this , t , e ) } , addHooks : function ( ) { L . Draw . Feature . prototype . addHooks . call ( this ) , this . _map && ( this . _markers = [ ] , this . _markerGroup = new L . LayerGroup , this . _map . addLayer ( this . _markerGroup ) , this . _poly = new L . Polyline ( [ ] , this . options . shapeOptions ) , this . _tooltip . updateContent ( this . _getTooltipText ( ) ) , this . _mouseMarker || ( this . _mouseMarker = L . marker ( this . _map . getCenter ( ) , { icon : L . divIcon ( { className : "leaflet-mouse-marker" , iconAnchor : [ 20 , 20 ] , iconSize : [ 40 , 40 ] } ) , opacity : 0 , zIndexOffset : this . options . zIndexOffset } ) ) , this . _mouseMarker . on ( "mousedown" , this . _onMouseDown , this ) . addTo ( this . _map ) , this . _map . on ( "mousemove" , this . _onMouseMove , this ) . on ( "mouseup" , this . _onMouseUp , this ) . on ( "zoomend" , this . _onZoomEnd , this ) ) } , removeHooks : function ( ) { L . Draw . Feature . prototype . removeHooks . call ( this ) , this . _clearHideErrorTimeout ( ) , this . _cleanUpShape ( ) , this . _map . removeLayer ( this . _markerGroup ) , delete this . _markerGroup , delete this . _markers , this . _map . removeLayer ( this . _poly ) , delete this . _poly , this . _mouseMarker . off ( "mousedown" , this . _onMouseDown , this ) . off ( "mouseup" , this . _onMouseUp , this ) , this . _map . removeLayer ( this . _mouseMarker ) , delete this . _mouseMarker , this . _clearGuides ( ) , this . _map . off ( "mousemove" , this . _onMouseMove , this ) . off ( "zoomend" , this . _onZoomEnd , this ) } , deleteLastVertex : function ( ) { if ( ! ( this . _markers . length <= 1 ) ) { var t = this . _markers . pop ( ) ,
e = this . _poly ,
i = this . _poly . spliceLatLngs ( e . getLatLngs ( ) . length - 1 , 1 ) [ 0 ] ;
this . _markerGroup . removeLayer ( t ) , e . getLatLngs ( ) . length < 2 && this . _map . removeLayer ( e ) , this . _vertexChanged ( i , ! 1 ) } } , addVertex : function ( t ) { var e = this . _markers . length ; return e > 0 && ! this . options . allowIntersection && this . _poly . newLatLngIntersects ( t ) ? void this . _showErrorTooltip ( ) : ( this . _errorShown && this . _hideErrorTooltip ( ) , this . _markers . push ( this . _createMarker ( t ) ) , this . _poly . addLatLng ( t ) , 2 === this . _poly . getLatLngs ( ) . length && this . _map . addLayer ( this . _poly ) , void this . _vertexChanged ( t , ! 0 ) ) } , _finishShape : function ( ) { var t = this . _poly . newLatLngIntersects ( this . _poly . getLatLngs ( ) [ 0 ] , ! 0 ) ; return ! this . options . allowIntersection && t || ! this . _shapeIsValid ( ) ? void this . _showErrorTooltip ( ) : ( this . _fireCreatedEvent ( ) , this . disable ( ) , void ( this . options . repeatMode && this . enable ( ) ) ) } , _shapeIsValid : function ( ) { return ! 0 } , _onZoomEnd : function ( ) { this . _updateGuide ( ) } , _onMouseMove : function ( t ) { var e = t . layerPoint ,
i = t . latlng ;
this . _currentLatLng = i , this . _updateTooltip ( i ) , this . _updateGuide ( e ) , this . _mouseMarker . setLatLng ( i ) , L . DomEvent . preventDefault ( t . originalEvent ) } , _vertexChanged : function ( t , e ) { this . _updateFinishHandler ( ) , this . _updateRunningMeasure ( t , e ) , this . _clearGuides ( ) , this . _updateTooltip ( ) } , _onMouseDown : function ( t ) { var e = t . originalEvent ;
this . _mouseDownOrigin = L . point ( e . clientX , e . clientY ) } , _onMouseUp : function ( e ) { if ( this . _mouseDownOrigin ) { var i = L . point ( e . originalEvent . clientX , e . originalEvent . clientY ) . distanceTo ( this . _mouseDownOrigin ) ;
Math . abs ( i ) < 9 * ( t . devicePixelRatio || 1 ) && this . addVertex ( e . latlng ) }
this . _mouseDownOrigin = null } , _updateFinishHandler : function ( ) { var t = this . _markers . length ;
t > 1 && this . _markers [ t - 1 ] . on ( "click" , this . _finishShape , this ) , t > 2 && this . _markers [ t - 2 ] . off ( "click" , this . _finishShape , this ) } , _createMarker : function ( t ) { var e = new L . Marker ( t , { icon : this . options . icon , zIndexOffset : 2 * this . options . zIndexOffset } ) ; return this . _markerGroup . addLayer ( e ) , e } , _updateGuide : function ( t ) { var e = this . _markers . length ;
e > 0 && ( t = t || this . _map . latLngToLayerPoint ( this . _currentLatLng ) , this . _clearGuides ( ) , this . _drawGuide ( this . _map . latLngToLayerPoint ( this . _markers [ e - 1 ] . getLatLng ( ) ) , t ) ) } , _updateTooltip : function ( t ) { var e = this . _getTooltipText ( ) ;
t && this . _tooltip . updatePosition ( t ) , this . _errorShown || this . _tooltip . updateContent ( e ) } , _drawGuide : function ( t , e ) { var i , o , a , s = Math . floor ( Math . sqrt ( Math . pow ( e . x - t . x , 2 ) + Math . pow ( e . y - t . y , 2 ) ) ) ,
r = this . options . guidelineDistance ,
n = this . options . maxGuideLineLength ,
l = s > n ? s - n : r ; for ( this . _guidesContainer || ( this . _guidesContainer = L . DomUtil . create ( "div" , "leaflet-draw-guides" , this . _overlayPane ) ) ; s > l ; l += this . options . guidelineDistance ) i = l / s , o = { x : Math . floor ( t . x * ( 1 - i ) + i * e . x ) , y : Math . floor ( t . y * ( 1 - i ) + i * e . y ) } , a = L . DomUtil . create ( "div" , "leaflet-draw-guide-dash" , this . _guidesContainer ) , a . style . backgroundColor = this . _errorShown ? this . options . drawError . color : this . options . shapeOptions . color , L . DomUtil . setPosition ( a , o ) } , _updateGuideColor : function ( t ) { if ( this . _guidesContainer )
for ( var e = 0 , i = this . _guidesContainer . childNodes . length ; i > e ; e ++ ) this . _guidesContainer . childNodes [ e ] . style . backgroundColor = t } , _clearGuides : function ( ) { if ( this . _guidesContainer )
for ( ; this . _guidesContainer . firstChild ; ) this . _guidesContainer . removeChild ( this . _guidesContainer . firstChild ) } , _getTooltipText : function ( ) { var t , e , i = this . options . showLength ; return 0 === this . _markers . length ? t = { text : L . drawLocal . draw . handlers . polyline . tooltip . start } : ( e = i ? this . _getMeasurementString ( ) : "" , t = 1 === this . _markers . length ? { text : L . drawLocal . draw . handlers . polyline . tooltip . cont , subtext : e } : { text : L . drawLocal . draw . handlers . polyline . tooltip . end , subtext : e } ) , t } , _updateRunningMeasure : function ( t , e ) { var i , o , a = this . _markers . length ;
1 === this . _markers . length ? this . _measurementRunningTotal = 0 : ( i = a - ( e ? 2 : 1 ) , o = t . distanceTo ( this . _markers [ i ] . getLatLng ( ) ) , this . _measurementRunningTotal += o * ( e ? 1 : - 1 ) ) } , _getMeasurementString : function ( ) { var t , e = this . _currentLatLng ,
i = this . _markers [ this . _markers . length - 1 ] . getLatLng ( ) ; return t = this . _measurementRunningTotal + e . distanceTo ( i ) , L . GeometryUtil . readableDistance ( t , this . options . metric ) } , _showErrorTooltip : function ( ) { this . _errorShown = ! 0 , this . _tooltip . showAsError ( ) . updateContent ( { text : this . options . drawError . message } ) , this . _updateGuideColor ( this . options . drawError . color ) , this . _poly . setStyle ( { color : this . options . drawError . color } ) , this . _clearHideErrorTimeout ( ) , this . _hideErrorTimeout = setTimeout ( L . Util . bind ( this . _hideErrorTooltip , this ) , this . options . drawError . timeout ) } , _hideErrorTooltip : function ( ) { this . _errorShown = ! 1 , this . _clearHideErrorTimeout ( ) , this . _tooltip . removeError ( ) . updateContent ( this . _getTooltipText ( ) ) , this . _updateGuideColor ( this . options . shapeOptions . color ) , this . _poly . setStyle ( { color : this . options . shapeOptions . color } ) } , _clearHideErrorTimeout : function ( ) { this . _hideErrorTimeout && ( clearTimeout ( this . _hideErrorTimeout ) , this . _hideErrorTimeout = null ) } , _cleanUpShape : function ( ) { this . _markers . length > 1 && this . _markers [ this . _markers . length - 1 ] . off ( "click" , this . _finishShape , this ) } , _fireCreatedEvent : function ( ) { var t = new this . Poly ( this . _poly . getLatLngs ( ) , this . options . shapeOptions ) ;
L . Draw . Feature . prototype . _fireCreatedEvent . call ( this , t ) } } ) , L . Draw . Polygon = L . Draw . Polyline . extend ( { statics : { TYPE : "polygon" } , Poly : L . Polygon , options : { showArea : ! 1 , shapeOptions : { stroke : ! 0 , color : "#f06eaa" , weight : 4 , opacity : . 5 , fill : ! 0 , fillColor : null , fillOpacity : . 2 , clickable : ! 0 } } , initialize : function ( t , e ) { L . Draw . Polyline . prototype . initialize . call ( this , t , e ) , this . type = L . Draw . Polygon . TYPE } , _updateFinishHandler : function ( ) { var t = this . _markers . length ;
1 === t && this . _markers [ 0 ] . on ( "click" , this . _finishShape , this ) , t > 2 && ( this . _markers [ t - 1 ] . on ( "dblclick" , this . _finishShape , this ) , t > 3 && this . _markers [ t - 2 ] . off ( "dblclick" , this . _finishShape , this ) ) } , _getTooltipText : function ( ) { var t , e ; return 0 === this . _markers . length ? t = L . drawLocal . draw . handlers . polygon . tooltip . start : this . _markers . length < 3 ? t = L . drawLocal . draw . handlers . polygon . tooltip . cont : ( t = L . drawLocal . draw . handlers . polygon . tooltip . end , e = this . _getMeasurementString ( ) ) , { text : t , subtext : e } } , _getMeasurementString : function ( ) { var t = this . _area ; return t ? L . GeometryUtil . readableArea ( t , this . options . metric ) : null } , _shapeIsValid : function ( ) { return this . _markers . length >= 3 } , _vertexAdded : function ( ) { if ( ! this . options . allowIntersection && this . options . showArea ) { var t = this . _poly . getLatLngs ( ) ;
this . _area = L . GeometryUtil . geodesicArea ( t ) } } , _cleanUpShape : function ( ) { var t = this . _markers . length ;
t > 0 && ( this . _markers [ 0 ] . off ( "click" , this . _finishShape , this ) , t > 2 && this . _markers [ t - 1 ] . off ( "dblclick" , this . _finishShape , this ) ) } } ) , L . SimpleShape = { } , L . Draw . SimpleShape = L . Draw . Feature . extend ( { options : { repeatMode : ! 1 } , initialize : function ( t , e ) { this . _endLabelText = L . drawLocal . draw . handlers . simpleshape . tooltip . end , L . Draw . Feature . prototype . initialize . call ( this , t , e ) } , addHooks : function ( ) { L . Draw . Feature . prototype . addHooks . call ( this ) , this . _map && ( this . _mapDraggable = this . _map . dragging . enabled ( ) , this . _mapDraggable && this . _map . dragging . disable ( ) , this . _container . style . cursor = "crosshair" , this . _tooltip . updateContent ( { text : this . _initialLabelText } ) , this . _map . on ( "mousedown" , this . _onMouseDown , this ) . on ( "mousemove" , this . _onMouseMove , this ) ) } , removeHooks : function ( ) { L . Draw . Feature . prototype . removeHooks . call ( this ) , this . _map && ( this . _mapDraggable && this . _map . dragging . enable ( ) , this . _container . style . cursor = "" , this . _map . off ( "mousedown" , this . _onMouseDown , this ) . off ( "mousemove" , this . _onMouseMove , this ) , L . DomEvent . off ( e , "mouseup" , this . _onMouseUp , this ) , this . _shape && ( this . _map . removeLayer ( this . _shape ) , delete this . _shape ) ) , this . _isDrawing = ! 1 } , _onMouseDown : function ( t ) { this . _isDrawing = ! 0 , this . _startLatLng = t . latlng , L . DomEvent . on ( e , "mouseup" , this . _onMouseUp , this ) . preventDefault ( t . originalEvent ) } , _onMouseMove : function ( t ) { var e = t . latlng ;
this . _tooltip . updatePosition ( e ) , this . _isDrawing && ( this . _tooltip . updateContent ( { text : this . _endLabelText } ) , this . _drawShape ( e ) ) } , _onMouseUp : function ( ) { this . _shape && this . _fireCreatedEvent ( ) , this . disable ( ) , this . options . repeatMode && this . enable ( ) } } ) , L . Draw . Rectangle = L . Draw . SimpleShape . extend ( { statics : { TYPE : "rectangle" } , options : { shapeOptions : { stroke : ! 0 , color : "#f06eaa" , weight : 4 , opacity : . 5 , fill : ! 0 , fillColor : null , fillOpacity : . 2 , clickable : ! 0 } } , initialize : function ( t , e ) { this . type = L . Draw . Rectangle . TYPE , this . _initialLabelText = L . drawLocal . draw . handlers . rectangle . tooltip . start , L . Draw . SimpleShape . prototype . initialize . call ( this , t , e ) } , _drawShape : function ( t ) { this . _shape ? this . _shape . setBounds ( new L . LatLngBounds ( this . _startLatLng , t ) ) : ( this . _shape = new L . Rectangle ( new L . LatLngBounds ( this . _startLatLng , t ) , this . options . shapeOptions ) , this . _map . addLayer ( this . _shape ) ) } , _fireCreatedEvent : function ( ) { var t = new L . Rectangle ( this . _shape . getBounds ( ) , this . options . shapeOptions ) ;
L . Draw . SimpleShape . prototype . _fireCreatedEvent . call ( this , t ) } } ) , L . Draw . Circle = L . Draw . SimpleShape . extend ( { statics : { TYPE : "circle" } , options : { shapeOptions : { stroke : ! 0 , color : "#f06eaa" , weight : 4 , opacity : . 5 , fill : ! 0 , fillColor : null , fillOpacity : . 2 , clickable : ! 0 } , showRadius : ! 0 , metric : ! 0 } , initialize : function ( t , e ) { this . type = L . Draw . Circle . TYPE , this . _initialLabelText = L . drawLocal . draw . handlers . circle . tooltip . start , L . Draw . SimpleShape . prototype . initialize . call ( this , t , e ) } , _drawShape : function ( t ) { this . _shape ? this . _shape . setRadius ( this . _startLatLng . distanceTo ( t ) ) : ( this . _shape = new L . Circle ( this . _startLatLng , this . _startLatLng . distanceTo ( t ) , this . options . shapeOptions ) , this . _map . addLayer ( this . _shape ) ) } , _fireCreatedEvent : function ( ) { var t = new L . Circle ( this . _startLatLng , this . _shape . getRadius ( ) , this . options . shapeOptions ) ;
L . Draw . SimpleShape . prototype . _fireCreatedEvent . call ( this , t ) } , _onMouseMove : function ( t ) { var e , i = t . latlng ,
o = this . options . showRadius ,
a = this . options . metric ;
this . _tooltip . updatePosition ( i ) , this . _isDrawing && ( this . _drawShape ( i ) , e = this . _shape . getRadius ( ) . toFixed ( 1 ) , this . _tooltip . updateContent ( { text : this . _endLabelText , subtext : o ? "Radius: " + L . GeometryUtil . readableDistance ( e , a ) : "" } ) ) } } ) , L . Draw . Marker = L . Draw . Feature . extend ( { statics : { TYPE : "marker" } , options : { icon : new L . Icon . Default , repeatMode : ! 1 , zIndexOffset : 2e3 } , initialize : function ( t , e ) { this . type = L . Draw . Marker . TYPE , L . Draw . Feature . prototype . initialize . call ( this , t , e ) } , addHooks : function ( ) { L . Draw . Feature . prototype . addHooks . call ( this ) , this . _map && ( this . _tooltip . updateContent ( { text : L . drawLocal . draw . handlers . marker . tooltip . start } ) , this . _mouseMarker || ( this . _mouseMarker = L . marker ( this . _map . getCenter ( ) , { icon : L . divIcon ( { className : "leaflet-mouse-marker" , iconAnchor : [ 20 , 20 ] , iconSize : [ 40 , 40 ] } ) , opacity : 0 , zIndexOffset : this . options . zIndexOffset } ) ) , this . _mouseMarker . on ( "click" , this . _onClick , this ) . addTo ( this . _map ) , this . _map . on ( "mousemove" , this . _onMouseMove , this ) ) } , removeHooks : function ( ) { L . Draw . Feature . prototype . removeHooks . call ( this ) , this . _map && ( this . _marker && ( this . _marker . off ( "click" , this . _onClick , this ) , this . _map . off ( "click" , this . _onClick , this ) . removeLayer ( this . _marker ) , delete this . _marker ) , this . _mouseMarker . off ( "click" , this . _onClick , this ) , this . _map . removeLayer ( this . _mouseMarker ) , delete this . _mouseMarker , this . _map . off ( "mousemove" , this . _onMouseMove , this ) ) } , _onMouseMove : function ( t ) { var e = t . latlng ;
this . _tooltip . updatePosition ( e ) , this . _mouseMarker . setLatLng ( e ) , this . _marker ? ( e = this . _mouseMarker . getLatLng ( ) , this . _marker . setLatLng ( e ) ) : ( this . _marker = new L . Marker ( e , { icon : this . options . icon , zIndexOffset : this . options . zIndexOffset } ) , this . _marker . on ( "click" , this . _onClick , this ) , this . _map . on ( "click" , this . _onClick , this ) . addLayer ( this . _marker ) ) } , _onClick : function ( ) { this . _fireCreatedEvent ( ) , this . disable ( ) , this . options . repeatMode && this . enable ( ) } , _fireCreatedEvent : function ( ) { var t = new L . Marker ( this . _marker . getLatLng ( ) , { icon : this . options . icon } ) ;
L . Draw . Feature . prototype . _fireCreatedEvent . call ( this , t ) } } ) , L . Edit = L . Edit || { } , L . Edit . Poly = L . Handler . extend ( { options : { icon : new L . DivIcon ( { iconSize : new L . Point ( 8 , 8 ) , className : "leaflet-div-icon leaflet-editing-icon" } ) } , initialize : function ( t , e ) { this . _poly = t , L . setOptions ( this , e ) } , addHooks : function ( ) { this . _poly . _map && ( this . _markerGroup || this . _initMarkers ( ) , this . _poly . _map . addLayer ( this . _markerGroup ) ) } , removeHooks : function ( ) { this . _poly . _map && ( this . _poly . _map . removeLayer ( this . _markerGroup ) , delete this . _markerGroup , delete this . _markers ) } , updateMarkers : function ( ) { this . _markerGroup . clearLayers ( ) , this . _initMarkers ( ) } , _initMarkers : function ( ) { this . _markerGroup || ( this . _markerGroup = new L . LayerGroup ) , this . _markers = [ ] ; var t , e , i , o , a = this . _poly . _latlngs ; for ( t = 0 , i = a . length ; i > t ; t ++ ) o = this . _createMarker ( a [ t ] , t ) , o . on ( "click" , this . _onMarkerClick , this ) , this . _markers . push ( o ) ; var s , r ; for ( t = 0 , e = i - 1 ; i > t ; e = t ++ ) ( 0 !== t || L . Polygon && this . _poly instanceof L . Polygon ) && ( s = this . _markers [ e ] , r = this . _markers [ t ] , this . _createMiddleMarker ( s , r ) , this . _updatePrevNext ( s , r ) ) } , _createMarker : function ( t , e ) { var i = new L . Marker ( t , { draggable : ! 0 , icon : this . options . icon } ) ; return i . _origLatLng = t , i . _index = e , i . on ( "drag" , this . _onMarkerDrag , this ) , i . on ( "dragend" , this . _fireEdit , this ) , this . _markerGroup . addLayer ( i ) , i } , _removeMarker : function ( t ) { var e = t . _index ;
this . _markerGroup . removeLayer ( t ) , this . _markers . splice ( e , 1 ) , this . _poly . spliceLatLngs ( e , 1 ) , this . _updateIndexes ( e , - 1 ) , t . off ( "drag" , this . _onMarkerDrag , this ) . off ( "dragend" , this . _fireEdit , this ) . off ( "click" , this . _onMarkerClick , this ) } , _fireEdit : function ( ) { this . _poly . edited = ! 0 , this . _poly . fire ( "edit" ) } , _onMarkerDrag : function ( t ) { var e = t . target ;
L . extend ( e . _origLatLng , e . _latlng ) , e . _middleLeft && e . _middleLeft . setLatLng ( this . _getMiddleLatLng ( e . _prev , e ) ) , e . _middleRight && e . _middleRight . setLatLng ( this . _getMiddleLatLng ( e , e . _next ) ) , this . _poly . redraw ( ) } , _onMarkerClick : function ( t ) { var e = L . Polygon && this . _poly instanceof L . Polygon ? 4 : 3 ,
i = t . target ;
this . _poly . _latlngs . length < e || ( this . _removeMarker ( i ) , this . _updatePrevNext ( i . _prev , i . _next ) , i . _middleLeft && this . _markerGroup . removeLayer ( i . _middleLeft ) , i . _middleRight && this . _markerGroup . removeLayer ( i . _middleRight ) , i . _prev && i . _next ? this . _createMiddleMarker ( i . _prev , i . _next ) : i . _prev ? i . _next || ( i . _prev . _middleRight = null ) : i . _next . _middleLeft = null , this . _fireEdit ( ) ) } , _updateIndexes : function ( t , e ) { this . _markerGroup . eachLayer ( function ( i ) { i . _index > t && ( i . _index += e ) } ) } , _createMiddleMarker : function ( t , e ) { var i , o , a , s = this . _getMiddleLatLng ( t , e ) ,
r = this . _createMarker ( s ) ;
r . setOpacity ( . 6 ) , t . _middleRight = e . _middleLeft = r , o = function ( ) { var o = e . _index ;
r . _index = o , r . off ( "click" , i , this ) . on ( "click" , this . _onMarkerClick , this ) , s . lat = r . getLatLng ( ) . lat , s . lng = r . getLatLng ( ) . lng , this . _poly . spliceLatLngs ( o , 0 , s ) , this . _markers . splice ( o , 0 , r ) , r . setOpacity ( 1 ) , this . _updateIndexes ( o , 1 ) , e . _index ++ , this . _updatePrevNext ( t , r ) , this . _updatePrevNext ( r , e ) , this . _poly . fire ( "editstart" ) } , a = function ( ) { r . off ( "dragstart" , o , this ) , r . off ( "dragend" , a , this ) , this . _createMiddleMarker ( t , r ) , this . _createMiddleMarker ( r , e ) } , i = function ( ) { o . call ( this ) , a . call ( this ) , this . _fireEdit ( ) } , r . on ( "click" , i , this ) . on ( "dragstart" , o , this ) . on ( "dragend" , a , this ) , this . _markerGroup . addLayer ( r ) } , _updatePrevNext : function ( t , e ) { t && ( t . _next = e ) , e && ( e . _prev = t ) } , _getMiddleLatLng : function ( t , e ) { var i = this . _poly . _map ,
o = i . project ( t . getLatLng ( ) ) ,
a = i . project ( e . getLatLng ( ) ) ; return i . unproject ( o . _add ( a ) . _divideBy ( 2 ) ) } } ) , L . Polyline . addInitHook ( function ( ) { this . editing || ( L . Edit . Poly && ( this . editing = new L . Edit . Poly ( this ) , this . options . editable && this . editing . enable ( ) ) , this . on ( "add" , function ( ) { this . editing && this . editing . enabled ( ) && this . editing . addHooks ( ) } ) , this . on ( "remove" , function ( ) { this . editing && this . editing . enabled ( ) && this . editing . removeHooks ( ) } ) ) } ) , L . Edit = L . Edit || { } , L . Edit . SimpleShape = L . Handler . extend ( { options : { moveIcon : new L . DivIcon ( { iconSize : new L . Point ( 8 , 8 ) , className : "leaflet-div-icon leaflet-editing-icon leaflet-edit-move" } ) , resizeIcon : new L . DivIcon ( { iconSize : new L . Point ( 8 , 8 ) , className : "leaflet-div-icon leaflet-editing-icon leaflet-edit-resize" } ) } , initialize : function ( t , e ) { this . _shape = t , L . Util . setOptions ( this , e ) } , addHooks : function ( ) { this . _shape . _map && ( this . _map = this . _shape . _map , this . _markerGroup || this . _initMarkers ( ) , this . _map . addLayer ( this . _markerGroup ) ) } , removeHooks : function ( ) { if ( this . _shape . _map ) { this . _unbindMarker ( this . _moveMarker ) ; for ( var t = 0 , e = this . _resizeMarkers . length ; e > t ; t ++ ) this . _unbindMarker ( this . _resizeMarkers [ t ] ) ;
this . _resizeMarkers = null , this . _map . removeLayer ( this . _markerGroup ) , delete this . _markerGroup }
this . _map = null } , updateMarkers : function ( ) { this . _markerGroup . clearLayers ( ) , this . _initMarkers ( ) } , _initMarkers : function ( ) { this . _markerGroup || ( this . _markerGroup = new L . LayerGroup ) , this . _createMoveMarker ( ) , this . _createResizeMarker ( ) } , _createMoveMarker : function ( ) { } , _createResizeMarker : function ( ) { } , _createMarker : function ( t , e ) { var i = new L . Marker ( t , { draggable : ! 0 , icon : e , zIndexOffset : 10 } ) ; return this . _bindMarker ( i ) , this . _markerGroup . addLayer ( i ) , i } , _bindMarker : function ( t ) { t . on ( "dragstart" , this . _onMarkerDragStart , this ) . on ( "drag" , this . _onMarkerDrag , this ) . on ( "dragend" , this . _onMarkerDragEnd , this ) } , _unbindMarker : function ( t ) { t . off ( "dragstart" , this . _onMarkerDragStart , this ) . off ( "drag" , this . _onMarkerDrag , this ) . off ( "dragend" , this . _onMarkerDragEnd , this ) } , _onMarkerDragStart : function ( t ) { var e = t . target ;
e . setOpacity ( 0 ) , this . _shape . fire ( "editstart" ) } , _fireEdit : function ( ) { this . _shape . edited = ! 0 , this . _shape . fire ( "edit" ) } , _onMarkerDrag : function ( t ) { var e = t . target ,
i = e . getLatLng ( ) ;
e === this . _moveMarker ? this . _move ( i ) : this . _resize ( i ) , this . _shape . redraw ( ) } , _onMarkerDragEnd : function ( t ) { var e = t . target ;
e . setOpacity ( 1 ) , this . _fireEdit ( ) } , _move : function ( ) { } , _resize : function ( ) { } } ) , L . Edit = L . Edit || { } , L . Edit . Rectangle = L . Edit . SimpleShape . extend ( { _createMoveMarker : function ( ) { var t = this . _shape . getBounds ( ) ,
e = t . getCenter ( ) ;
this . _moveMarker = this . _createMarker ( e , this . options . moveIcon ) } , _createResizeMarker : function ( ) { var t = this . _getCorners ( ) ;
this . _resizeMarkers = [ ] ; for ( var e = 0 , i = t . length ; i > e ; e ++ ) this . _resizeMarkers . push ( this . _createMarker ( t [ e ] , this . options . resizeIcon ) ) , this . _resizeMarkers [ e ] . _cornerIndex = e } , _onMarkerDragStart : function ( t ) { L . Edit . SimpleShape . prototype . _onMarkerDragStart . call ( this , t ) ; var e = this . _getCorners ( ) ,
i = t . target ,
o = i . _cornerIndex ;
this . _oppositeCorner = e [ ( o + 2 ) % 4 ] , this . _toggleCornerMarkers ( 0 , o ) } , _onMarkerDragEnd : function ( t ) { var e , i , o = t . target ;
o === this . _moveMarker && ( e = this . _shape . getBounds ( ) , i = e . getCenter ( ) , o . setLatLng ( i ) ) , this . _toggleCornerMarkers ( 1 ) , this . _repositionCornerMarkers ( ) , L . Edit . SimpleShape . prototype . _onMarkerDragEnd . call ( this , t ) } , _move : function ( t ) { for ( var e , i = this . _shape . getLatLngs ( ) , o = this . _shape . getBounds ( ) , a = o . getCenter ( ) , s = [ ] , r = 0 , n = i . length ; n > r ; r ++ ) e = [ i [ r ] . lat - a . lat , i [ r ] . lng - a . lng ] , s . push ( [ t . lat + e [ 0 ] , t . lng + e [ 1 ] ] ) ;
this . _shape . setLatLngs ( s ) , this . _repositionCornerMarkers ( ) } , _resize : function ( t ) { var e ;
this . _shape . setBounds ( L . latLngBounds ( t , this . _oppositeCorner ) ) , e = this . _shape . getBounds ( ) , this . _moveMarker . setLatLng ( e . getCenter ( ) ) } , _getCorners : function ( ) { var t = this . _shape . getBounds ( ) ,
e = t . getNorthWest ( ) ,
i = t . getNorthEast ( ) ,
o = t . getSouthEast ( ) ,
a = t . getSouthWest ( ) ; return [ e , i , o , a ] } , _toggleCornerMarkers : function ( t ) { for ( var e = 0 , i = this . _resizeMarkers . length ; i > e ; e ++ ) this . _resizeMarkers [ e ] . setOpacity ( t ) } , _repositionCornerMarkers : function ( ) { for ( var t = this . _getCorners ( ) , e = 0 , i = this . _resizeMarkers . length ; i > e ; e ++ ) this . _resizeMarkers [ e ] . setLatLng ( t [ e ] ) } } ) , L . Rectangle . addInitHook ( function ( ) { L . Edit . Rectangle && ( this . editing = new L . Edit . Rectangle ( this ) , this . options . editable && this . editing . enable ( ) ) } ) , L . Edit = L . Edit || { } , L . Edit . Circle = L . Edit . SimpleShape . extend ( { _createMoveMarker : function ( ) { var t = this . _shape . getLatLng ( ) ;
this . _moveMarker = this . _createMarker ( t , this . options . moveIcon ) } , _createResizeMarker : function ( ) { var t = this . _shape . getLatLng ( ) ,
e = this . _getResizeMarkerPoint ( t ) ;
this . _resizeMarkers = [ ] , this . _resizeMarkers . push ( this . _createMarker ( e , this . options . resizeIcon ) ) } , _getResizeMarkerPoint : function ( t ) { var e = this . _shape . _radius * Math . cos ( Math . PI / 4 ) ,
i = this . _map . project ( t ) ; return this . _map . unproject ( [ i . x + e , i . y - e ] ) } , _move : function ( t ) { var e = this . _getResizeMarkerPoint ( t ) ;
this . _resizeMarkers [ 0 ] . setLatLng ( e ) , this . _shape . setLatLng ( t ) } , _resize : function ( t ) { var e = this . _moveMarker . getLatLng ( ) ,
i = e . distanceTo ( t ) ;
this . _shape . setRadius ( i ) } } ) , L . Circle . addInitHook ( function ( ) { L . Edit . Circle && ( this . editing = new L . Edit . Circle ( this ) , this . options . editable && this . editing . enable ( ) ) , this . on ( "add" , function ( ) { this . editing && this . editing . enabled ( ) && this . editing . addHooks ( ) } ) , this . on ( "remove" , function ( ) { this . editing && this . editing . enabled ( ) && this . editing . removeHooks ( ) } ) } ) , L . LatLngUtil = { cloneLatLngs : function ( t ) { for ( var e = [ ] , i = 0 , o = t . length ; o > i ; i ++ ) e . push ( this . cloneLatLng ( t [ i ] ) ) ; return e } , cloneLatLng : function ( t ) { return L . latLng ( t . lat , t . lng ) } } , L . GeometryUtil = L . extend ( L . GeometryUtil || { } , { geodesicArea : function ( t ) { var e , i , o = t . length ,
a = 0 ,
s = L . LatLng . DEG _TO _RAD ; if ( o > 2 ) { for ( var r = 0 ; o > r ; r ++ ) e = t [ r ] , i = t [ ( r + 1 ) % o ] , a += ( i . lng - e . lng ) * s * ( 2 + Math . sin ( e . lat * s ) + Math . sin ( i . lat * s ) ) ;
a = 6378137 * a * 6378137 / 2 } return Math . abs ( a ) } , readableArea : function ( t , e ) { var i ; return e ? i = t >= 1e4 ? ( 1e-4 * t ) . toFixed ( 2 ) + " ha" : t . toFixed ( 2 ) + " m²" : ( t *= . 836127 , i = t >= 3097600 ? ( t / 3097600 ) . toFixed ( 2 ) + " mi²" : t >= 4840 ? ( t / 4840 ) . toFixed ( 2 ) + " acres" : Math . ceil ( t ) + " yd²" ) , i } , readableDistance : function ( t , e ) { var i ; return e ? i = t > 1e3 ? ( t / 1e3 ) . toFixed ( 2 ) + " km" : Math . ceil ( t ) + " m" : ( t *= 1.09361 , i = t > 1760 ? ( t / 1760 ) . toFixed ( 2 ) + " miles" : Math . ceil ( t ) + " yd" ) , i } } ) , L . Util . extend ( L . LineUtil , { segmentsIntersect : function ( t , e , i , o ) { return this . _checkCounterclockwise ( t , i , o ) !== this . _checkCounterclockwise ( e , i , o ) && this . _checkCounterclockwise ( t , e , i ) !== this . _checkCounterclockwise ( t , e , o ) } , _checkCounterclockwise : function ( t , e , i ) { return ( i . y - t . y ) * ( e . x - t . x ) > ( e . y - t . y ) * ( i . x - t . x ) } } ) , L . Polyline . include ( { intersects : function ( ) { var t , e , i , o = this . _originalPoints ,
a = o ? o . length : 0 ; if ( this . _tooFewPointsForIntersection ( ) ) return ! 1 ; for ( t = a - 1 ; t >= 3 ; t -- )
if ( e = o [ t - 1 ] , i = o [ t ] , this . _lineSegmentsIntersectsRange ( e , i , t - 2 ) ) return ! 0 ;
return ! 1 } , newLatLngIntersects : function ( t , e ) { return this . _map ? this . newPointIntersects ( this . _map . latLngToLayerPoint ( t ) , e ) : ! 1 } , newPointIntersects : function ( t , e ) { var i = this . _originalPoints ,
o = i ? i . length : 0 ,
a = i ? i [ o - 1 ] : null ,
s = o - 2 ; return this . _tooFewPointsForIntersection ( 1 ) ? ! 1 : this . _lineSegmentsIntersectsRange ( a , t , s , e ? 1 : 0 ) } , _tooFewPointsForIntersection : function ( t ) { var e = this . _originalPoints ,
i = e ? e . length : 0 ; return i += t || 0 , ! this . _originalPoints || 3 >= i } , _lineSegmentsIntersectsRange : function ( t , e , i , o ) { var a , s , r = this . _originalPoints ;
o = o || 0 ; for ( var n = i ; n > o ; n -- )
if ( a = r [ n - 1 ] , s = r [ n ] , L . LineUtil . segmentsIntersect ( t , e , a , s ) ) return ! 0 ;
return ! 1 } } ) , L . Polygon . include ( { intersects : function ( ) { var t , e , i , o , a , s = this . _originalPoints ; return this . _tooFewPointsForIntersection ( ) ? ! 1 : ( t = L . Polyline . prototype . intersects . call ( this ) ) ? ! 0 : ( e = s . length , i = s [ 0 ] , o = s [ e - 1 ] , a = e - 2 , this . _lineSegmentsIntersectsRange ( o , i , a , 1 ) ) } } ) , L . Control . Draw = L . Control . extend ( { options : { position : "topleft" , draw : { } , edit : ! 1 } , initialize : function ( t ) { if ( L . version < "0.7" ) throw new Error ( "Leaflet.draw 0.2.3+ requires Leaflet 0.7.0+. Download latest from https://github.com/Leaflet/Leaflet/" ) ;
L . Control . prototype . initialize . call ( this , t ) ; var e , i ;
this . _toolbars = { } , L . DrawToolbar && this . options . draw && ( i = new L . DrawToolbar ( this . options . draw ) , e = L . stamp ( i ) , this . _toolbars [ e ] = i , this . _toolbars [ e ] . on ( "enable" , this . _toolbarEnabled , this ) ) , L . EditToolbar && this . options . edit && ( i = new L . EditToolbar ( this . options . edit ) , e = L . stamp ( i ) , this . _toolbars [ e ] = i , this . _toolbars [ e ] . on ( "enable" , this . _toolbarEnabled , this ) ) } , onAdd : function ( t ) { var e , i = L . DomUtil . create ( "div" , "leaflet-draw" ) ,
o = ! 1 ,
a = "leaflet-draw-toolbar-top" ; for ( var s in this . _toolbars ) this . _toolbars . hasOwnProperty ( s ) && ( e = this . _toolbars [ s ] . addToolbar ( t ) , e && ( o || ( L . DomUtil . hasClass ( e , a ) || L . DomUtil . addClass ( e . childNodes [ 0 ] , a ) , o = ! 0 ) , i . appendChild ( e ) ) ) ; return i } , onRemove : function ( ) { for ( var t in this . _toolbars ) this . _toolbars . hasOwnProperty ( t ) && this . _toolbars [ t ] . removeToolbar ( ) } , setDrawingOptions : function ( t ) { for ( var e in this . _toolbars ) this . _toolbars [ e ] instanceof L . DrawToolbar && this . _toolbars [ e ] . setOptions ( t ) } , _toolbarEnabled : function ( t ) { var e = "" + L . stamp ( t . target ) ; for ( var i in this . _toolbars ) this . _toolbars . hasOwnProperty ( i ) && i !== e && this . _toolbars [ i ] . disable ( ) } } ) , L . Map . mergeOptions ( { drawControlTooltips : ! 0 , drawControl : ! 1 } ) , L . Map . addInitHook ( function ( ) { this . options . drawControl && ( this . drawControl = new L . Control . Draw , this . addControl ( this . drawControl ) ) } ) , L . Toolbar = L . Class . extend ( {
includes : [ L . Mixin . Events ] ,
initialize : function ( t ) { L . setOptions ( this , t ) , this . _modes = { } , this . _actionButtons = [ ] , this . _activeMode = null } ,
enabled : function ( ) { return null !== this . _activeMode } ,
disable : function ( ) { this . enabled ( ) && this . _activeMode . handler . disable ( ) } ,
addToolbar : function ( t ) { var e , i = L . DomUtil . create ( "div" , "leaflet-draw-section" ) ,
o = 0 ,
a = this . _toolbarClass || "" ,
s = this . getModeHandlers ( t ) ; for ( this . _toolbarContainer = L . DomUtil . create ( "div" , "leaflet-draw-toolbar leaflet-bar" ) , this . _map = t , e = 0 ; e < s . length ; e ++ ) s [ e ] . enabled && this . _initModeHandler ( s [ e ] . handler , this . _toolbarContainer , o ++ , a , s [ e ] . title ) ; return o ? ( this . _lastButtonIndex = -- o , this . _actionsContainer = L . DomUtil . create ( "ul" , "leaflet-draw-actions" ) , i . appendChild ( this . _toolbarContainer ) , i . appendChild ( this . _actionsContainer ) , i ) : void 0 } ,
removeToolbar : function ( ) { for ( var t in this . _modes ) this . _modes . hasOwnProperty ( t ) && ( this . _disposeButton ( this . _modes [ t ] . button , this . _modes [ t ] . handler . enable , this . _modes [ t ] . handler ) , this . _modes [ t ] . handler . disable ( ) , this . _modes [ t ] . handler . off ( "enabled" , this . _handlerActivated , this ) . off ( "disabled" , this . _handlerDeactivated , this ) ) ;
this . _modes = { } ; for ( var e = 0 , i = this . _actionButtons . length ; i > e ; e ++ ) this . _disposeButton ( this . _actionButtons [ e ] . button , this . _actionButtons [ e ] . callback , this ) ;
this . _actionButtons = [ ] , this . _actionsContainer = null } ,
_initModeHandler : function ( t , e , i , o , a ) { var s = t . type ;
this . _modes [ s ] = { } , this . _modes [ s ] . handler = t , this . _modes [ s ] . button = this . _createButton ( { title : a , className : o + "-" + s , container : e , callback : this . _modes [ s ] . handler . enable , context : this . _modes [ s ] . handler } ) , this . _modes [ s ] . buttonIndex = i , this . _modes [ s ] . handler . on ( "enabled" , this . _handlerActivated , this ) . on ( "disabled" , this . _handlerDeactivated , this ) } ,
_createButton : function ( t ) { var e = L . DomUtil . create ( "a" , t . className || "" , t . container ) ; return e . href = "#" , t . text && ( e . innerHTML = t . text ) , t . title && ( e . title = t . title ) , L . DomEvent . on ( e , "click" , L . DomEvent . stopPropagation ) . on ( e , "mousedown" , L . DomEvent . stopPropagation ) . on ( e , "dblclick" , L . DomEvent . stopPropagation ) . on ( e , "click" , L . DomEvent . preventDefault ) . on ( e , "click" , t . callback , t . context ) , e } ,
_disposeButton : function ( t , e ) { L . DomEvent . off ( t , "click" , L . DomEvent . stopPropagation ) . off ( t , "mousedown" , L . DomEvent . stopPropagation ) . off ( t , "dblclick" , L . DomEvent . stopPropagation ) . off ( t , "click" , L . DomEvent . preventDefault ) . off ( t , "click" , e ) } ,
_handlerActivated : function ( t ) { this . disable ( ) , this . _activeMode = this . _modes [ t . handler ] , L . DomUtil . addClass ( this . _activeMode . button , "leaflet-draw-toolbar-button-enabled" ) , this . _showActionsToolbar ( ) , this . fire ( "enable" ) } ,
_handlerDeactivated : function ( ) { this . _hideActionsToolbar ( ) , L . DomUtil . removeClass ( this . _activeMode . button , "leaflet-draw-toolbar-button-enabled" ) , this . _activeMode = null , this . fire ( "disable" ) } ,
_createActions : function ( t ) { var e , i , o , a , s = this . _actionsContainer ,
r = this . getActions ( t ) ,
n = r . length ; for ( i = 0 , o = this . _actionButtons . length ; o > i ; i ++ ) this . _disposeButton ( this . _actionButtons [ i ] . button , this . _actionButtons [ i ] . callback ) ; for ( this . _actionButtons = [ ] ; s . firstChild ; ) s . removeChild ( s . firstChild ) ; for ( var l = 0 ; n > l ; l ++ ) "enabled" in r [ l ] && ! r [ l ] . enabled || ( e = L . DomUtil . create ( "li" , "" , s ) , a = this . _createButton ( { title : r [ l ] . title , text : r [ l ] . text , container : e , callback : r [ l ] . callback , context : r [ l ] . context } ) , this . _actionButtons . push ( { button : a , callback : r [ l ] . callback } ) ) } ,
_showActionsToolbar : function ( ) {
var t = this . _activeMode . buttonIndex ,
e = this . _lastButtonIndex ,
i = this . _activeMode . button . offsetTop - 1 ;
this . _createActions ( this . _activeMode . handler ) , this . _actionsContainer . style . top = i + "px" , 0 === t && ( L . DomUtil . addClass ( this . _toolbarContainer , "leaflet-draw-toolbar-notop" ) , L . DomUtil . addClass ( this . _actionsContainer , "leaflet-draw-actions-top" ) ) , t === e && ( L . DomUtil . addClass ( this . _toolbarContainer , "leaflet-draw-toolbar-nobottom" ) , L . DomUtil . addClass ( this . _actionsContainer , "leaflet-draw-actions-bottom" ) ) , this . _actionsContainer . style . display = "block"
} ,
_hideActionsToolbar : function ( ) { this . _actionsContainer . style . display = "none" , L . DomUtil . removeClass ( this . _toolbarContainer , "leaflet-draw-toolbar-notop" ) , L . DomUtil . removeClass ( this . _toolbarContainer , "leaflet-draw-toolbar-nobottom" ) , L . DomUtil . removeClass ( this . _actionsContainer , "leaflet-draw-actions-top" ) , L . DomUtil . removeClass ( this . _actionsContainer , "leaflet-draw-actions-bottom" ) }
} ) , L . Tooltip = L . Class . extend ( { initialize : function ( t ) { this . _map = t , this . _popupPane = t . _panes . popupPane , this . _container = t . options . drawControlTooltips ? L . DomUtil . create ( "div" , "leaflet-draw-tooltip" , this . _popupPane ) : null , this . _singleLineLabel = ! 1 } , dispose : function ( ) { this . _container && ( this . _popupPane . removeChild ( this . _container ) , this . _container = null ) } , updateContent : function ( t ) { return this . _container ? ( t . subtext = t . subtext || "" , 0 !== t . subtext . length || this . _singleLineLabel ? t . subtext . length > 0 && this . _singleLineLabel && ( L . DomUtil . removeClass ( this . _container , "leaflet-draw-tooltip-single" ) , this . _singleLineLabel = ! 1 ) : ( L . DomUtil . addClass ( this . _container , "leaflet-draw-tooltip-single" ) , this . _singleLineLabel = ! 0 ) , this . _container . innerHTML = ( t . subtext . length > 0 ? '<span class="leaflet-draw-tooltip-subtext">' + t . subtext + "</span><br />" : "" ) + "<span>" + t . text + "</span>" , this ) : this } , updatePosition : function ( t ) { var e = this . _map . latLngToLayerPoint ( t ) ,
i = this . _container ; return this . _container && ( i . style . visibility = "inherit" , L . DomUtil . setPosition ( i , e ) ) , this } , showAsError : function ( ) { return this . _container && L . DomUtil . addClass ( this . _container , "leaflet-error-draw-tooltip" ) , this } , removeError : function ( ) { return this . _container && L . DomUtil . removeClass ( this . _container , "leaflet-error-draw-tooltip" ) , this } } ) , L . DrawToolbar = L . Toolbar . extend ( { options : { polyline : { } , polygon : { } , rectangle : { } , circle : { } , marker : { } } , initialize : function ( t ) { for ( var e in this . options ) this . options . hasOwnProperty ( e ) && t [ e ] && ( t [ e ] = L . extend ( { } , this . options [ e ] , t [ e ] ) ) ;
this . _toolbarClass = "leaflet-draw-draw" , L . Toolbar . prototype . initialize . call ( this , t ) } , getModeHandlers : function ( t ) { return [ { enabled : this . options . polyline , handler : new L . Draw . Polyline ( t , this . options . polyline ) , title : L . drawLocal . draw . toolbar . buttons . polyline } , { enabled : this . options . polygon , handler : new L . Draw . Polygon ( t , this . options . polygon ) , title : L . drawLocal . draw . toolbar . buttons . polygon } , { enabled : this . options . rectangle , handler : new L . Draw . Rectangle ( t , this . options . rectangle ) , title : L . drawLocal . draw . toolbar . buttons . rectangle } , { enabled : this . options . circle , handler : new L . Draw . Circle ( t , this . options . circle ) , title : L . drawLocal . draw . toolbar . buttons . circle } , { enabled : this . options . marker , handler : new L . Draw . Marker ( t , this . options . marker ) , title : L . drawLocal . draw . toolbar . buttons . marker } ] } , getActions : function ( t ) { return [ { enabled : t . deleteLastVertex , title : L . drawLocal . draw . toolbar . undo . title , text : L . drawLocal . draw . toolbar . undo . text , callback : t . deleteLastVertex , context : t } , { title : L . drawLocal . draw . toolbar . actions . title , text : L . drawLocal . draw . toolbar . actions . text , callback : this . disable , context : this } ] } , setOptions : function ( t ) { L . setOptions ( this , t ) ; for ( var e in this . _modes ) this . _modes . hasOwnProperty ( e ) && t . hasOwnProperty ( e ) && this . _modes [ e ] . handler . setOptions ( t [ e ] ) } } ) , L . EditToolbar = L . Toolbar . extend ( { options : { edit : { selectedPathOptions : { color : "#fe57a1" , opacity : . 6 , dashArray : "10, 10" , fill : ! 0 , fillColor : "#fe57a1" , fillOpacity : . 1 } } , remove : { } , featureGroup : null } , initialize : function ( t ) { t . edit && ( "undefined" == typeof t . edit . selectedPathOptions && ( t . edit . selectedPathOptions = this . options . edit . selectedPathOptions ) , t . edit = L . extend ( { } , this . options . edit , t . edit ) ) , t . remove && ( t . remove = L . extend ( { } , this . options . remove , t . remove ) ) , this . _toolbarClass = "leaflet-draw-edit" , L . Toolbar . prototype . initialize . call ( this , t ) , this . _selectedFeatureCount = 0 } , getModeHandlers : function ( t ) { var e = this . options . featureGroup ; return [ { enabled : this . options . edit , handler : new L . EditToolbar . Edit ( t , { featureGroup : e , selectedPathOptions : this . options . edit . selectedPathOptions } ) , title : L . drawLocal . edit . toolbar . buttons . edit } , { enabled : this . options . remove , handler : new L . EditToolbar . Delete ( t , { featureGroup : e } ) , title : L . drawLocal . edit . toolbar . buttons . remove } ] } , getActions : function ( ) { return [ { title : L . drawLocal . edit . toolbar . actions . save . title , text : L . drawLocal . edit . toolbar . actions . save . text , callback : this . _save , context : this } , { title : L . drawLocal . edit . toolbar . actions . cancel . title , text : L . drawLocal . edit . toolbar . actions . cancel . text , callback : this . disable , context : this } ] } , addToolbar : function ( t ) { var e = L . Toolbar . prototype . addToolbar . call ( this , t ) ; return this . _checkDisabled ( ) , this . options . featureGroup . on ( "layeradd layerremove" , this . _checkDisabled , this ) , e } , removeToolbar : function ( ) { this . options . featureGroup . off ( "layeradd layerremove" , this . _checkDisabled , this ) , L . Toolbar . prototype . removeToolbar . call ( this ) } , disable : function ( ) { this . enabled ( ) && ( this . _activeMode . handler . revertLayers ( ) , L . Toolbar . prototype . disable . call ( this ) ) } , _save : function ( ) { this . _activeMode . handler . save ( ) , this . _activeMode . handler . disable ( ) } , _checkDisabled : function ( ) { var t , e = this . options . featureGroup ,
i = 0 !== e . getLayers ( ) . length ;
this . options . edit && ( t = this . _modes [ L . EditToolbar . Edit . TYPE ] . button , i ? L . DomUtil . removeClass ( t , "leaflet-disabled" ) : L . DomUtil . addClass ( t , "leaflet-disabled" ) , t . setAttribute ( "title" , i ? L . drawLocal . edit . toolbar . buttons . edit : L . drawLocal . edit . toolbar . buttons . editDisabled ) ) , this . options . remove && ( t = this . _modes [ L . EditToolbar . Delete . TYPE ] . button , i ? L . DomUtil . removeClass ( t , "leaflet-disabled" ) : L . DomUtil . addClass ( t , "leaflet-disabled" ) , t . setAttribute ( "title" , i ? L . drawLocal . edit . toolbar . buttons . remove : L . drawLocal . edit . toolbar . buttons . removeDisabled ) ) } } ) , L . EditToolbar . Edit = L . Handler . extend ( { statics : { TYPE : "edit" } , includes : L . Mixin . Events , initialize : function ( t , e ) { if ( L . Handler . prototype . initialize . call ( this , t ) , this . _selectedPathOptions = e . selectedPathOptions , this . _featureGroup = e . featureGroup , ! ( this . _featureGroup instanceof L . FeatureGroup ) ) throw new Error ( "options.featureGroup must be a L.FeatureGroup" ) ;
this . _uneditedLayerProps = { } , this . type = L . EditToolbar . Edit . TYPE } , enable : function ( ) { ! this . _enabled && this . _hasAvailableLayers ( ) && ( this . fire ( "enabled" , { handler : this . type } ) , this . _map . fire ( "draw:editstart" , { handler : this . type } ) , L . Handler . prototype . enable . call ( this ) , this . _featureGroup . on ( "layeradd" , this . _enableLayerEdit , this ) . on ( "layerremove" , this . _disableLayerEdit , this ) ) } , disable : function ( ) { this . _enabled && ( this . _featureGroup . off ( "layeradd" , this . _enableLayerEdit , this ) . off ( "layerremove" , this . _disableLayerEdit , this ) , L . Handler . prototype . disable . call ( this ) , this . _map . fire ( "draw:editstop" , { handler : this . type } ) , this . fire ( "disabled" , { handler : this . type } ) ) } , addHooks : function ( ) { var t = this . _map ;
t && ( t . getContainer ( ) . focus ( ) , this . _featureGroup . eachLayer ( this . _enableLayerEdit , this ) , this . _tooltip = new L . Tooltip ( this . _map ) , this . _tooltip . updateContent ( { text : L . drawLocal . edit . handlers . edit . tooltip . text , subtext : L . drawLocal . edit . handlers . edit . tooltip . subtext } ) , this . _map . on ( "mousemove" , this . _onMouseMove , this ) ) } , removeHooks : function ( ) { this . _map && ( this . _featureGroup . eachLayer ( this . _disableLayerEdit , this ) , this . _uneditedLayerProps = { } , this . _tooltip . dispose ( ) , this . _tooltip = null , this . _map . off ( "mousemove" , this . _onMouseMove , this ) ) } , revertLayers : function ( ) { this . _featureGroup . eachLayer ( function ( t ) { this . _revertLayer ( t ) } , this ) } , save : function ( ) { var t = new L . LayerGroup ;
this . _featureGroup . eachLayer ( function ( e ) { e . edited && ( t . addLayer ( e ) , e . edited = ! 1 ) } ) , this . _map . fire ( "draw:edited" , { layers : t } ) } , _backupLayer : function ( t ) { var e = L . Util . stamp ( t ) ;
this . _uneditedLayerProps [ e ] || ( t instanceof L . Polyline || t instanceof L . Polygon || t instanceof L . Rectangle ? this . _uneditedLayerProps [ e ] = { latlngs : L . LatLngUtil . cloneLatLngs ( t . getLatLngs ( ) ) } : t instanceof L . Circle ? this . _uneditedLayerProps [ e ] = { latlng : L . LatLngUtil . cloneLatLng ( t . getLatLng ( ) ) , radius : t . getRadius ( ) } : t instanceof L . Marker && ( this . _uneditedLayerProps [ e ] = { latlng : L . LatLngUtil . cloneLatLng ( t . getLatLng ( ) ) } ) ) } , _revertLayer : function ( t ) { var e = L . Util . stamp ( t ) ;
t . edited = ! 1 , this . _uneditedLayerProps . hasOwnProperty ( e ) && ( t instanceof L . Polyline || t instanceof L . Polygon || t instanceof L . Rectangle ? t . setLatLngs ( this . _uneditedLayerProps [ e ] . latlngs ) : t instanceof L . Circle ? ( t . setLatLng ( this . _uneditedLayerProps [ e ] . latlng ) , t . setRadius ( this . _uneditedLayerProps [ e ] . radius ) ) : t instanceof L . Marker && t . setLatLng ( this . _uneditedLayerProps [ e ] . latlng ) ) } , _toggleMarkerHighlight : function ( t ) { if ( t . _icon ) { var e = t . _icon ;
e . style . display = "none" , L . DomUtil . hasClass ( e , "leaflet-edit-marker-selected" ) ? ( L . DomUtil . removeClass ( e , "leaflet-edit-marker-selected" ) , this . _offsetMarker ( e , - 4 ) ) : ( L . DomUtil . addClass ( e , "leaflet-edit-marker-selected" ) , this . _offsetMarker ( e , 4 ) ) , e . style . display = "" } } , _offsetMarker : function ( t , e ) { var i = parseInt ( t . style . marginTop , 10 ) - e ,
o = parseInt ( t . style . marginLeft , 10 ) - e ;
t . style . marginTop = i + "px" , t . style . marginLeft = o + "px" } , _enableLayerEdit : function ( t ) { var e , i = t . layer || t . target || t ,
o = i instanceof L . Marker ;
( ! o || i . _icon ) && ( this . _backupLayer ( i ) , this . _selectedPathOptions && ( e = L . Util . extend ( { } , this . _selectedPathOptions ) , o ? this . _toggleMarkerHighlight ( i ) : ( i . options . previousOptions = L . Util . extend ( { dashArray : null } , i . options ) , i instanceof L . Circle || i instanceof L . Polygon || i instanceof L . Rectangle || ( e . fill = ! 1 ) , i . setStyle ( e ) ) ) , o ? ( i . dragging . enable ( ) , i . on ( "dragend" , this . _onMarkerDragEnd ) ) : i . editing . enable ( ) ) } , _disableLayerEdit : function ( t ) { var e = t . layer || t . target || t ;
e . edited = ! 1 , this . _selectedPathOptions && ( e instanceof L . Marker ? this . _toggleMarkerHighlight ( e ) : ( e . setStyle ( e . options . previousOptions ) , delete e . options . previousOptions ) ) , e instanceof L . Marker ? ( e . dragging . disable ( ) , e . off ( "dragend" , this . _onMarkerDragEnd , this ) ) : e . editing . disable ( ) } , _onMarkerDragEnd : function ( t ) { var e = t . target ;
e . edited = ! 0 } , _onMouseMove : function ( t ) { this . _tooltip . updatePosition ( t . latlng ) } , _hasAvailableLayers : function ( ) { return 0 !== this . _featureGroup . getLayers ( ) . length } } ) , L . EditToolbar . Delete = L . Handler . extend ( { statics : { TYPE : "remove" } , includes : L . Mixin . Events , initialize : function ( t , e ) { if ( L . Handler . prototype . initialize . call ( this , t ) , L . Util . setOptions ( this , e ) , this . _deletableLayers = this . options . featureGroup , ! ( this . _deletableLayers instanceof L . FeatureGroup ) ) throw new Error ( "options.featureGroup must be a L.FeatureGroup" ) ;
this . type = L . EditToolbar . Delete . TYPE } , enable : function ( ) { ! this . _enabled && this . _hasAvailableLayers ( ) && ( this . fire ( "enabled" , { handler : this . type } ) , this . _map . fire ( "draw:deletestart" , { handler : this . type } ) , L . Handler . prototype . enable . call ( this ) , this . _deletableLayers . on ( "layeradd" , this . _enableLayerDelete , this ) . on ( "layerremove" , this . _disableLayerDelete , this ) ) } , disable : function ( ) { this . _enabled && ( this . _deletableLayers . off ( "layeradd" , this . _enableLayerDelete , this ) . off ( "layerremove" , this . _disableLayerDelete , this ) , L . Handler . prototype . disable . call ( this ) , this . _map . fire ( "draw:deletestop" , { handler : this . type } ) , this . fire ( "disabled" , { handler : this . type } ) ) } , addHooks : function ( ) { var t = this . _map ;
t && ( t . getContainer ( ) . focus ( ) , this . _deletableLayers . eachLayer ( this . _enableLayerDelete , this ) , this . _deletedLayers = new L . layerGroup , this . _tooltip = new L . Tooltip ( this . _map ) , this . _tooltip . updateContent ( { text : L . drawLocal . edit . handlers . remove . tooltip . text } ) , this . _map . on ( "mousemove" , this . _onMouseMove , this ) ) } , removeHooks : function ( ) { this . _map && ( this . _deletableLayers . eachLayer ( this . _disableLayerDelete , this ) , this . _deletedLayers = null , this . _tooltip . dispose ( ) , this . _tooltip = null , this . _map . off ( "mousemove" , this . _onMouseMove , this ) ) } , revertLayers : function ( ) { this . _deletedLayers . eachLayer ( function ( t ) { this . _deletableLayers . addLayer ( t ) } , this ) } , save : function ( ) { this . _map . fire ( "draw:deleted" , { layers : this . _deletedLayers } ) } , _enableLayerDelete : function ( t ) { var e = t . layer || t . target || t ;
e . on ( "click" , this . _removeLayer , this ) } , _disableLayerDelete : function ( t ) { var e = t . layer || t . target || t ;
e . off ( "click" , this . _removeLayer , this ) , this . _deletedLayers . removeLayer ( e ) } , _removeLayer : function ( t ) { var e = t . layer || t . target || t ;
this . _deletableLayers . removeLayer ( e ) , this . _deletedLayers . addLayer ( e ) } , _onMouseMove : function ( t ) { this . _tooltip . updatePosition ( t . latlng ) } , _hasAvailableLayers : function ( ) { return 0 !== this . _deletableLayers . getLayers ( ) . length } } )
2021-08-19 08:11:10 +00:00
} ( window , document ) ;