Skip to content

Instantly share code, notes, and snippets.

@cyberlex404
Created March 12, 2018 00:27
Show Gist options
  • Select an option

  • Save cyberlex404/35a3d6372b2892427018d6d4a73deabc to your computer and use it in GitHub Desktop.

Select an option

Save cyberlex404/35a3d6372b2892427018d6d4a73deabc to your computer and use it in GitHub Desktop.
(function ($, Drupal, settings) {
"use strict";
Drupal.behaviors.BraslavLakesMap = {
attach: function (context) {
if (drupalSettings['braslavlakes_map']) {
$(context).find('#braslav-lakes-map').once('yamaps-processed').each(function (index, element) {
var mapid = $(element).attr('id');
console.log(mapid);
// Check if the Map container really exists and hasn't been yet initialized.
if (drupalSettings['braslavlakes_map'] && !Drupal.LakesYaMaps.map_data[mapid]) {
var map_settings = drupalSettings['braslavlakes_map']['map_settings'];
var data = drupalSettings['braslavlakes_map']['data'];
// Set the map_data[mapid] settings.
Drupal.LakesYaMaps.map_data[mapid] = map_settings;
ymaps.ready(function () {
Drupal.LakesYaMaps.map_initialize(mapid, map_settings, data);
});
}
});
}
}
};
Drupal.LakesYaMaps = {
geocoder: null,
map_data: {},
firstMapId: null,
clustersPreset: {
housing: 'islands#greenClusterIcons',
camping: 'islands#orangeClusterIcons',
attraction: 'islands#blueClusterIcons'
},
getGeofieldYaMaps: function (mapid) {
var self = this;
var map = {};
var zoom_start = self.map_data[mapid].entity_operation !== 'edit' ? Number(self.map_data[mapid].zoom_start) : Number(self.map_data[mapid].zoom_focus);
var zoom_min = Number(self.map_data[mapid].zoom_min);
var zoom_max = Number(self.map_data[mapid].zoom_max);
var center = self.map_data[mapid].position;
var options = {
zoom: zoom_start,
minZoom: zoom_min,
maxZoom: zoom_max,
center: self.map_data[mapid].position,
// mapTypeId: self.map_data[mapid].map_type,
// mapTypeControl: !!self.map_data[mapid].map_type_selector,
// mapTypeControlOptions: {
// position: google.maps.ControlPosition.TOP_RIGHT
// },
// scaleControl: true,
// streetViewControlOptions: {
// position: google.maps.ControlPosition.TOP_RIGHT
// },
// zoomControlOptions: {
// style: google.maps.ZoomControlStyle.LARGE,
// position: google.maps.ControlPosition.TOP_LEFT
// }
};
console.log(options);
ymaps.ready(function () {
});
// map = new ymaps.Map(document.getElementById(mapid), options);
return map;
},
renderFeatureCollection: function (map, data) {
var self = this;
// var map = Drupal.YaMapsSimple.map_data[mapid].map;
var objectManager = new ymaps.ObjectManager({
clusterize: true,
gridSize: 64,
clusterDisableClickZoom: false
});
objectManager.objects.options.set('preset', 'islands#greenDotIcon');
objectManager.clusters.options.set('preset', 'islands#greenClusterIcons');
// console.log(objectManager);
// console.log(map.geoObjects);
map.geoObjects.add(objectManager);
//map.geoObjects.add(objectManager);
objectManager.add(data);
},
// Define a Geographical point, from coordinates.
getLatLng: function (mapid, lat, lng) {
var self = this;
var latLng = {};
latLng = new ymaps.geometry.Point([lat, lng]);
console.log(latLng.getCoordinates());
return latLng;
},
loadItems: function (map, map_settings, type) {
var self = this;
var objectManager = new ymaps.ObjectManager({
clusterize: true,
gridSize: 64
});
console.log(this.clustersPreset[type]);
objectManager.clusters.options.set('preset', this.clustersPreset[type]);
map.geoObjects.add(objectManager);
$.getJSON('/backend/map/load', { backend: "map", type: type } )
.done(function( json ) {
objectManager.add(json);
})
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});
},
// Init Geofield Map and its functions.
map_initialize: function (mapid, map_settings, data) {
var self = this;
$.noConflict();
var center_lat = map_settings.map_center.lat,
center_lon = map_settings.map_center.lon;
// Define the Geofield Position.
var position = self.getLatLng(mapid, center_lat, center_lon);
self.map_data[mapid].position = position;
// Map configure object
var mapState = {
center: position.getCoordinates(),
controls: map_settings.controls,
zoom: 10
};
// create Map object
var map = new ymaps.Map(document.getElementById(mapid), mapState);
map.behaviors.disable('scrollZoom');
self.map_data[mapid].map = map;
self.map_data[mapid].features = data.features;
console.log(data.features);
this.loadItems(map, map_settings, 'housing');
this.loadItems(map, map_settings, 'camping');
this.loadItems(map, map_settings, 'attraction');
// self.renderFeatureCollection(map, data);
}
};
})(jQuery, Drupal, drupalSettings);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment