Skip to content

Instantly share code, notes, and snippets.

@zt50tz
Created March 4, 2023 18:52
Show Gist options
  • Save zt50tz/d7123556196a550ae128df9a2d16637a to your computer and use it in GitHub Desktop.
Save zt50tz/d7123556196a550ae128df9a2d16637a to your computer and use it in GitHub Desktop.
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("vue");const t=Symbol();const o=new class{events;ymapReady;scriptIsNotAttached;pluginInstalledGlobal;constructor(){this.events={},this.ymapReady=!1,this.scriptIsNotAttached=!0,this.pluginInstalledGlobal=!1}$on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),()=>{this.events[e]=this.events[e].filter((e=>t!==e))}}$emit(e){const t=this.events[e];t&&t.forEach((e=>e()))}};function n(e){return new Promise(((t,n)=>{if(window.ymaps)return t(!0);if(document.getElementById("vue-yandex-maps-script"))return void o.$on("scriptIsLoaded",t);const a=document.createElement("SCRIPT"),{apiKey:s="",lang:r="ru_RU",version:d="2.1",coordorder:c="latlong",debug:l=!1,enterprise:p=!1}=e,i=`https://${p?"enterprise.":""}api-maps.yandex.ru/${d}/?${`lang=${r}${s&&`&apikey=${s}`}&mode=${l?"debug":"release"}&coordorder=${c}`}`;a.setAttribute("src",i),a.setAttribute("async",""),a.setAttribute("defer",""),a.setAttribute("id","vue-yandex-maps-script"),document.head.appendChild(a),o.scriptIsNotAttached=!1,a.onload=(e=>()=>{ymaps.ready((()=>{o.ymapReady=!0,o.$emit("scriptIsLoaded"),e(!0)}))})(t),a.onerror=n}))}const a=e=>Array.isArray(e)?e.map(a):+e,s=["actionbegin","actionbreak","actionend","actiontick","actiontickcomplete","balloonclose","balloonopen","boundschange","click","contextmenu","dblclick","destroy","hintclose","hintopen","marginchange","mousedown","mouseenter","mouseleave","mousemove","mouseup","multitouchend","multitouchmove","multitouchstart","optionschange","sizechange","typechange","wheel"],r=["balloonclose","balloonopen","beforedrag","beforedragstart","click","contextmenu","dblclick","drag","dragend","dragstart","editorstatechange","geometrychange","hintclose","hintopen","mapchange","mousedown","mouseenter","mouseleave","mousemove","mouseup","multitouchend","multitouchmove","multitouchstart","optionschange","overlaychange","parentchange","propertieschange","wheel"];function d(e,t=!1){const o=[],n=[];let a,s;return{addGeoObject:(n,s)=>{o.push(t?s:n),clearTimeout(a),a=window.setTimeout((()=>e(o,"add")))},deleteGeoObject:(o,a)=>{n.push(t?a:o),clearTimeout(s),s=window.setTimeout((()=>e(n,"remove")))}}}var c=e.defineComponent({name:"YandexMap",props:{coordinates:{type:Array,required:!0},zoom:{type:Number,default:10},bounds:{type:Array,default:null},behaviors:{type:Array,default:null},controls:{type:Array,default:null},detailedControls:{type:Object,default:null},events:{type:Array,default:()=>["click"],validator:e=>e.every((e=>s.includes(e)))},mapType:{type:String,default:"map"},settings:{type:Object,default:()=>({})},panOptions:{type:Object,default:void 0}},emits:[...s,"geo-objects-updated","created"],setup(a,{emit:s,slots:r,expose:c}){const l=e.ref(!1),p=o.pluginInstalledGlobal&&e.inject("pluginOptions")||{};let i;const u=`yandexMap${Math.round(1e5*Math.random())}`,{addGeoObject:m,deleteGeoObject:b}=d(((e,t)=>{i&&e.length&&(e.forEach((e=>i?.geoObjects[t](e))),s("geo-objects-updated",i.geoObjects),e=[])}));e.provide(t,{addGeoObject:m,deleteGeoObject:b});const y=()=>{if(l.value=!0,i=new ymaps.Map(u,{center:a.coordinates,zoom:a.zoom,bounds:a.bounds,behaviors:a.behaviors,controls:a.controls,type:`yandex#${a.mapType}`}),a.events.forEach((e=>i?.events?.add(e,(t=>s(e,t))))),a.detailedControls){Object.keys(a.detailedControls).forEach((e=>{i?.controls.remove(e),i?.controls.add(e,a.detailedControls?.[e])}))}s("created",i)};if(o.scriptIsNotAttached){n({...p,...a.settings})}return o.ymapReady?ymaps.ready(y):o.$on("scriptIsLoaded",y),c(i),e.watch((()=>a.coordinates),(e=>i?.panTo(e,a.panOptions))),e.watch((()=>a.zoom),(e=>i?.setZoom(e))),e.watch((()=>a.bounds),(e=>i?.setBounds(e))),e.watch((()=>a.mapType),(e=>i?.setType(e))),()=>e.h("section",{class:"yandex-container","data-test":"map"},[e.h("div",{id:u,style:"min-height: 100%;"}),l.value&&e.h("div",{style:"display: none;"},[r.default?.()])])}}),l=e.defineComponent({name:"YandexMarker",props:{coordinates:{type:Array,required:!0},markerId:{type:[String,Number],required:!0},properties:{type:Object,default:()=>({})},options:{type:Object,default:null},type:{type:String,default:"Point"},radius:{type:Number,default:null},events:{type:Array,default:()=>["click"],validator:e=>e.every((e=>r.includes(e)))}},emits:[...r],setup(o,{emit:n,slots:s,expose:r}){const{addGeoObject:d,deleteGeoObject:c}=e.inject(t)||{},l=e.computed((()=>o.coordinates.map(a))),p=e.ref(!1),i={geometry:{type:o.type,coordinates:l.value,radius:o.radius},properties:{...o.properties,markerId:o.markerId}},u=s.component?.().length?ymaps.templateLayoutFactory.createClass(`<div id="balloon-${o.markerId}" class="yandex-balloon"><div>`,{build(){u.superclass.build.call(this),p.value=!0},clear(){p.value=!1,u.superclass.clear.call(this)}}):null,m={balloonContentLayout:u,...o.options},b=new ymaps.GeoObject(i,m);o.events.forEach((e=>b.events?.add(e,(t=>n(e,t))))),e.provide("marker",b);const y={...i,options:m};return e.onMounted((()=>{d(b,y)})),e.onBeforeUnmount((()=>{c(b,y)})),e.watch((()=>o.coordinates),(e=>{b.geometry?.setCoordinates?.(e)})),r(b),s.component?.().length?()=>p.value&&e.h(e.Teleport,{to:`#balloon-${o.markerId}`},[s.component?.()]):()=>s.default?.()}}),p=e.defineComponent({name:"YandexGeoObjectCollection",props:{options:{type:Object,default:()=>({})}},emits:["geo-objects-updated"],setup(o,{emit:n,expose:a,slots:s}){const r=new ymaps.GeoObjectCollection({},o.options),{addGeoObject:c,deleteGeoObject:l}=e.inject(t)||{},{addGeoObject:p,deleteGeoObject:i}=d(((e,t)=>{r&&e.length&&(e.forEach((e=>r[t](e))),n("geo-objects-updated",r),e=[])}));return e.provide(t,{addGeoObject:p,deleteGeoObject:i}),e.onMounted((()=>{c(r)})),e.onBeforeUnmount((()=>{l(r)})),a(r),()=>s.default?.()}}),i=e.defineComponent({name:"YandexClusterer",props:{options:{type:Object,default:()=>({})}},emits:["geo-objects-updated"],setup(o,{emit:n,expose:a,slots:s}){const r=new ymaps.Clusterer(o.options),{addGeoObject:c,deleteGeoObject:l}=e.inject(t)||{},{addGeoObject:p,deleteGeoObject:i}=d(((e,t)=>{r&&e.length&&(r[t](e),n("geo-objects-updated",r),e=[])}));return e.provide(t,{addGeoObject:p,deleteGeoObject:i}),e.onMounted((()=>{c(r)})),e.onBeforeUnmount((()=>{l(r)})),a(r),()=>s.default?.()}}),u=e.defineComponent({name:"YandexObjectManager",props:{options:{type:Object,default:()=>({})}},emits:["geo-objects-updated"],setup(o,{emit:n,expose:a,slots:s}){const r=new ymaps.ObjectManager(o.options),{addGeoObject:c,deleteGeoObject:l}=e.inject(t)||{},{addGeoObject:p,deleteGeoObject:i}=d(((e,t)=>{if(!r||!e.length)return;const o=e.map((e=>({type:"Feature",id:e.properties.markerId,geometry:e.geometry,properties:e.properties,options:e.options})));r[t](o),n("geo-objects-updated",r),e=[]}),!0);return e.provide(t,{addGeoObject:p,deleteGeoObject:i}),e.onMounted((()=>{c(r)})),e.onBeforeUnmount((()=>{l(r)})),a(r),()=>s.default?.()}});let m;const b=n,y=c,h=l,g=p,j=i,v=u;var f={install:(e,t)=>{m||(m=!0,o.pluginInstalledGlobal=!0,e.provide("pluginOptions",t),e.component("YandexMap",c),e.component("YandexMarker",l),e.component("YandexCollection",p),e.component("YandexClusterer",i),e.component("YandexObjectManager",u))}};exports.YandexClusterer=j,exports.YandexCollection=g,exports.YandexMap=y,exports.YandexMarker=h,exports.YandexObjectManager=v,exports.default=f,exports.loadYmap=b;
//# sourceMappingURL=vue-yandex-maps.esm.js.map
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment