Files
farmOS-dev/web/libraries/farmOS-map/farmOS-map-chunk-2a6cb9e43ffc9d5d324d.js
2024-12-10 15:08:16 +01:00

1 line
10 KiB
JavaScript

"use strict";(self.webpackChunk_farmos_org_farmos_map=self.webpackChunk_farmos_org_farmos_map||[]).push([[723],{2832:(e,t,a)=>{a.r(t),a.d(t,{default:()=>F});var n=a(8775),s=a(245),i=a(5487),r=a(5010),l=a(7517),o=a(8373),c=a(3232),h=a(6002),d=a(933),g=a(8714),u=a(9466),m=a(5289),w=a(8813),f=a(7673);class p extends n.default{constructor(e){const t=e||{};super({element:document.createElement("div"),target:t.target});const{element:a}=this,n=t.className||"ol-edit";a.className=`${n} ${s.XV} ${s.hg}`;const i=document.createElement("div");i.className="ol-edit-buttons draw",a.appendChild(i);const r=document.createElement("div");r.className="ol-edit-buttons actions",a.appendChild(r),this.buttons={};const l=[{name:"polygon",label:'<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><g><path d="m3.5 18.47 2.65-6.74 3.65.03 2.46-6.23h8.25l-5.1 12.93z" fill="#dcdcdc" /><path d="M12.25 4c-.4 0-.77.16-1.05.45a1.55 1.55 0 0 0-.08 2.07l-1.47 3.72c-.5.05-.94.36-1.17.8h-1a1.47 1.47 0 0 0-2.38-.38 1.54 1.54 0 0 0-.08 2.06l-1.67 4.23c-.35.04-.67.2-.91.44a1.54 1.54 0 0 0 0 2.16 1.48 1.48 0 0 0 2.38-.38l9.26-.01a1.47 1.47 0 0 0 2.38.38 1.55 1.55 0 0 0 .08-2.07l4.12-10.42c.34-.04.66-.2.9-.44a1.55 1.55 0 0 0 0-2.16 1.48 1.48 0 0 0-2.38.37h-5.6A1.49 1.49 0 0 0 12.25 4zm1.33 2.23h5.6c.06.1.12.2.2.3l-4.12 10.4a1.48 1.48 0 0 0-1.18.82l-9.27.01c-.05-.1-.11-.2-.18-.28l1.67-4.23a1.5 1.5 0 0 0 1.17-.8h1c.25.5.75.84 1.33.84a1.52 1.52 0 0 0 1.13-2.53l1.47-3.71a1.5 1.5 0 0 0 1.18-.82z" fill="currentColor"/></g></svg>',tooltip:"Draw a Polygon",draw:"Polygon",element:i},{name:"line",label:'<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24"><path d="M23,8c0,1.1-0.9,2-2,2c-0.18,0-0.35-0.02-0.51-0.07l-3.56,3.55C16.98,13.64,17,13.82,17,14c0,1.1-0.9,2-2,2s-2-0.9-2-2 c0-0.18,0.02-0.36,0.07-0.52l-2.55-2.55C10.36,10.98,10.18,11,10,11s-0.36-0.02-0.52-0.07l-4.55,4.56C4.98,15.65,5,15.82,5,16 c0,1.1-0.9,2-2,2s-2-0.9-2-2s0.9-2,2-2c0.18,0,0.35,0.02,0.51,0.07l4.56-4.55C8.02,9.36,8,9.18,8,9c0-1.1,0.9-2,2-2s2,0.9,2,2 c0,0.18-0.02,0.36-0.07,0.52l2.55,2.55C14.64,12.02,14.82,12,15,12s0.36,0.02,0.52,0.07l3.55-3.56C19.02,8.35,19,8.18,19,8 c0-1.1,0.9-2,2-2S23,6.9,23,8z" fill="currentColor"/></svg>',tooltip:"Draw a Line",draw:"LineString",element:i},{name:"point",label:"•",tooltip:"Draw a Point",draw:"Point",element:i},{name:"circle",label:'<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><circle cx="12" cy="12" r="10" stroke-width="2.5" stroke-opacity="1" fill="#dcdcdc" stroke="currentColor" /></svg>',tooltip:"Draw a Circle",draw:"Circle",element:i},{name:"modify",label:'<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="m4.37 19.35 2.4-13.11 13.01-2.15v15.26Z" fill="#dcdcdc" style="stroke-width:1.5"/><g fill="currentColor"><path d="M116.96 93.6a1.09 1.09 0 0 0-.93.74l-1.4.23.16.99 1.4-.23a1.09 1.09 0 0 0 .27.27v8.07c-.2.1-.35.27-.46.46h-8.23a1.09 1.09 0 0 0-.21-.28l.2-1.09-.98-.18-.19 1.02a1.08 1.08 0 0 0 .32 2.12 1.09 1.09 0 0 0 .87-.59h8.27a1.08 1.08 0 1 0 1.41-1.4v-8.08a1.08 1.08 0 0 0-.5-2.04zm-3.32 1.13-1.97.33.16.98 1.97-.32zm-5.16.26V95c-.6 0-1.1.5-1.1 1.1 0 .34.17.65.43.86l-.31 1.68.99.18.3-1.68c.35-.1.62-.37.73-.7l1.32-.23-.16-.98-1.32.2a1.1 1.1 0 0 0-.88-.44zm-1.16 4.63-.36 1.97.98.18.37-1.96z" transform="translate(-159.58 -141.1) scale(1.5335)"/><path d="m11.6 17.79-1.19-2.14c-.05-.06-.05-.06-1.12 1l-1.07 1.03c-.03 0-.97-10.55-.97-10.63 0-.01 8.56 6.35 8.59 6.4l-1.46.38-1.48.38 1.2 2.12.05.12-1.25.68-1.26.69c-.02 0-.03 0-.05-.03zm.82-1.5.4-.22-.68-1.23-.69-1.26 1.08-.27 1.07-.3a231.68 231.68 0 0 0-5.18-3.89L9 15.6l.81-.76.8-.77.67 1.16c.76 1.37.73 1.3.74 1.3l.42-.2z"/></g><path d="M11.99 16.47a89.39 89.39 0 0 1-1.38-2.43l-.72.65a880.95 880.95 0 0 1-.87.81c-.04-.02-.07-.38-.37-3.83a101.06 101.06 0 0 1-.2-2.38v-.12l1.65 1.22c1.77 1.32 3.13 2.33 3.35 2.52l.14.1-1.08.28-1.07.3.86 1.56c.26.46.46.89.46.9 0 .03-.66.42-.72.43z" fill="#FFF"/></svg>',tooltip:"Modify features",element:r},{name:"move",label:'<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z" fill="currentColor"/></svg>',tooltip:"Move features",element:r},{name:"delete",label:'<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM8 9h8v10H8V9zm7.5-5l-1-1h-5l-1 1H5v2h14V4h-3.5z" fill="currentColor"/></svg>',tooltip:"Delete selected feature",visible:!1,element:r}];for(let e=0;e<l.length;e+=1)this.buttons[l[e].name]=this.addButton(l[e].element,l[e]);this.layer=t.layer,this.eventListeners={drawstart:[],drawend:[],modifystart:[],modifyend:[],translatestart:[],translating:[],translateend:[],select:[],delete:[],disable:[]}}addButton(e,t){const{label:a,tooltip:n}=t,s=document.createElement("button");return s.name=t.name,s.className=`ol-edit-${t.name}`,s.type="button",s.title=n,s.innerHTML=a,!1===t.visible&&(s.style.display="none"),t.draw&&(s.draw=t.draw),s.addEventListener(i.Z.CLICK,this.handleClick.bind(this),!1),e.appendChild(s),s}handleClick(e){if(e.preventDefault(),e.target.name)if(this.buttons[e.target.name].classList.contains("active"))this.disableAll();else{if("delete"===e.target.name)return this.selectInteraction.getFeatures().forEach((e=>{this.layer.getSource().removeFeature(e),this.snapInteraction&&this.snapInteraction.removeFeature(e)})),this.selectInteraction.getFeatures().clear(),this.eventListeners.delete.forEach((({cb:e,format:t})=>{e(t.writeFeatures(this.getFeatures(),w.Z))})),void this.toggleDeleteButton(!1);this.disableAll(),this.toggleActiveButton(e.target.name),this.enableEscape(),["point","line","polygon","circle"].includes(e.target.name)?(this.enableDraw(e.target.draw),this.enableSnap()):"modify"===e.target.name?(this.enableSelect(),this.enableModify(),this.enableSnap()):"move"===e.target.name&&(this.enableSelect(),this.enableMove())}}handleEscape(e){"Escape"===e.key&&(this.disableAll(),document.removeEventListener(i.Z.KEYDOWN,this.handleEscape,!1))}enableDraw(e){let t;"Circle"===e&&(t=(0,r.N_)(100)),this.drawInteraction=new r.ZP({source:this.layer.getSource(),type:e,geometryFunction:t}),this.getMap().addInteraction(this.drawInteraction),Object.entries(this.eventListeners).forEach((([e,t])=>{["drawstart","drawend"].includes(e)&&t.forEach((({cb:t,format:a})=>{this.drawInteraction.on(e,(e=>{const n=a.writeFeatures(this.getFeatures().concat(e.feature),w.Z);t(n,e)}))}))})),this.drawInteraction.on("drawend",(e=>{e.feature&&this.snapInteraction&&this.snapInteraction.addFeature(e.feature)}))}enableSelect(){this.selectInteraction||(this.selectInteraction=new l.Z({layers:[this.layer]}),Object.entries(this.eventListeners).forEach((([e,t])=>{["select"].includes(e)&&t.forEach((({cb:t,format:a})=>{this.selectInteraction.on(e,(e=>{const n=a.writeFeatures(e.selected,w.Z);t(n,e)}))}))})),this.selectInteraction.on("select",(e=>{e.selected.length?this.toggleDeleteButton(!0):this.toggleDeleteButton(!1)}))),this.getMap().addInteraction(this.selectInteraction)}enableModify(){this.modifyInteraction||(this.modifyInteraction=new o.Z({features:this.selectInteraction.getFeatures()}),Object.entries(this.eventListeners).forEach((([e,t])=>{["modifystart","modifyend"].includes(e)&&t.forEach((({cb:t,format:a})=>{this.modifyInteraction.on(e,(e=>{const n=a.writeFeatures(this.getFeatures(),w.Z);t(n,e)}))}))}))),this.getMap().addInteraction(this.modifyInteraction)}enableMove(){this.translateInteraction||(this.translateInteraction=new c.Z({features:this.selectInteraction.getFeatures()}),Object.entries(this.eventListeners).forEach((([e,t])=>{["translatestart","translating","translateend"].includes(e)&&t.forEach((({cb:t,format:a})=>{this.translateInteraction.on(e,(e=>{const n=a.writeFeatures(this.getFeatures(),w.Z);t(n,e)}))}))}))),this.getMap().addInteraction(this.translateInteraction)}enableSnap(){this.snapInteraction||(this.snapInteraction=new h.Z({features:this.layer.getSource().getFeaturesCollection()||new g.Z}),(0,f.Z)(this.getMap().getLayerGroup(),(e=>{if("function"==typeof e.getSource){const t=e.getSource();if("null"!==t&&t instanceof d.default){const e=t.getFeatures();"ready"===t.getState()&&e.length>0&&e.forEach((e=>{this.snapInteraction.addFeature(e)}))}}}))),this.getMap().addInteraction(this.snapInteraction)}enableEscape(){this.handleEscape=this.handleEscape.bind(this),document.addEventListener(i.Z.KEYDOWN,this.handleEscape,!1)}disableAll(){["drawInteraction","modifyInteraction","selectInteraction","snapInteraction","translateInteraction"].forEach((e=>{this[e]&&("selectInteraction"===e&&this[e].getFeatures().clear(),this.getMap().removeInteraction(this[e]))})),this.toggleActiveButton(!1,!1),this.toggleDeleteButton(!1),this.eventListeners.disable.forEach((({cb:e,format:t})=>{e(t.writeFeatures(this.getFeatures(),w.Z))}))}toggleActiveButton(e,t=!0){Object.keys(this.buttons).forEach((a=>{this.buttons[a].name===e&&t?this.buttons[a].classList.add("active"):this.buttons[a].classList.remove("active")}))}toggleDeleteButton(e){this.buttons.delete.style.display=e?"block":"none"}addInteractionListener(e,t,a=new u.Z){const n=["drawstart","drawend","modifystart","modifyend","translatestart","translating","translateend","select","delete","disable"];if(!n.includes(e))throw new Error(`Invalid event type. Valid options include: ${n.join(", ")}`);this.eventListeners[e].includes({cb:t,format:a})||this.eventListeners[e].push({cb:t,format:a})}getFeatures(){return this.layer.getSource().getFeatures()}getWKT(){return(new m.Z).writeFeatures(this.getFeatures(),w.Z)}getGeoJSON(){return(new u.Z).writeFeatures(this.getFeatures(),w.Z)}wktOn(e,t){this.formatOn(e,t,new m.Z)}geoJSONOn(e,t){this.formatOn(e,t,new u.Z)}formatOn(e,t,a){"featurechange"!==e?this.addInteractionListener(e,t,a):["drawend","modifyend","translating","translateend","delete"].forEach((e=>{this.addInteractionListener(e,t,a)}))}}const v=p;var b=a(2290),y=a(5984),I=a(9556);function E(e,t,a){const n=(0,y.DE)(e,t,a),{length:s}=n,i=a>1?a:2;for(let e=0;e<s;e+=i)n[e]%=360,n[e]<-180&&(n[e]+=360),n[e]>180&&(n[e]-=360);return n}const F={attach(e,{layer:t}={}){!function(){const e=(0,b.get)("EPSG:3857"),t=(0,b.get)("EPSG:4326");(0,I.Od)(e,t),(0,I.IH)(e,t,E)}();const a=t||e.addLayer("vector",{title:"Drawing",group:"Editable layers",color:"orange"}),n="us"===e.options.units?"us":"metric";e.edit=new v({layer:a,units:n}),e.map.addControl(e.edit)}}}}]);