| Current Path : /home/bechata/mp/wp-content/uploads/2022/ejn73c/ |
| Current File : /home/bechata/mp/wp-content/uploads/2022/ejn73c/map-edit-page.tar |
map-edit-page.js 0000666 00000044120 15176076443 0007536 0 ustar 00 /**
* @namespace WPGMZA
* @module MapEditPage
* @requires WPGMZA.EventDispatcher
*/
var wpgmza_autoCompleteDisabled = false;
jQuery(function($) {
if(WPGMZA.currentPage != "map-edit")
return;
WPGMZA.MapEditPage = function()
{
var self = this;
var element = document.body;
WPGMZA.EventDispatcher.call(this);
$("#wpgmaps_options fieldset").wrapInner("<div class='wpgmza-flex'></div>");
this.themePanel = new WPGMZA.ThemePanel();
this.themeEditor = new WPGMZA.ThemeEditor();
this.map = WPGMZA.maps[0];
// Drawing manager
if(!WPGMZA.pro_version || WPGMZA.Version.compare(WPGMZA.pro_version, '8.1.0') >= WPGMZA.Version.EQUAL_TO)
this.drawingManager = WPGMZA.DrawingManager.createInstance(this.map);
// UI
this.initDataTables();
this.initFeaturePanels();
this.initJQueryUIControls();
if(WPGMZA.locale !== 'en'){
$('#datatable_no_result_message,#datatable_search_string').parent().parent().hide();
}
// Address input
$("input.wpgmza-address").each(function(index, el) {
el.addressInput = WPGMZA.AddressInput.createInstance(el, self.map);
});
$('#wpgmza-map-edit-page input[type="color"]').each(function(){
$("<div class='button-secondary wpgmza-paste-color-btn' title='Paste a HEX color code'><i class='fa fa-clipboard' aria-hidden='true'></i></div>").insertAfter(this);
});
jQuery('body').on('click','.wpgmza_ac_result', function(e) {
var index = jQuery(this).data('id');
var lat = jQuery(this).data('lat');
var lng = jQuery(this).data('lng');
var name = jQuery('#wpgmza_item_address_'+index).html();
jQuery("input[name='lat']").val(lat);
jQuery("input[name='lng']").val(lng);
jQuery("#wpgmza_add_address_map_editor").val(name);
jQuery('#wpgmza_autocomplete_search_results').hide();
});
jQuery('body').on('click', '.wpgmza-paste-color-btn', function(){
try{
var colorBtn = $(this);
if(!navigator || !navigator.clipboard || !navigator.clipboard.readText){
return;
}
navigator.clipboard.readText()
.then(function(textcopy) {
colorBtn.parent().find('input[type="color"]').val("#" + textcopy.replace("#","").trim());
})
.catch(function(err) {
console.error("WP Google Maps: Could not access clipboard", err);
});
} catch(c_ex){
}
});
jQuery('body').on('focusout', '#wpgmza_add_address_map_editor', function(e) {
setTimeout(function() {
jQuery('#wpgmza_autocomplete_search_results').fadeOut('slow');
},500)
});
var ajaxRequest = false;
var wpgmzaAjaxTimeout = false;
var wpgmzaStartTyping = false;
var wpgmzaKeyStrokeCount = 1;
var wpgmzaAvgTimeBetweenStrokes = 300; //300 ms by default (equates to 40wpm which is the average typing speed of a person)
var wpgmzaTotalTimeForKeyStrokes = 0;
var wpgmzaTmp = '';
var wpgmzaIdentifiedTypingSpeed = false;
$('body').on('keypress', '.wpgmza-address', function(e) {
if (this.id == 'wpgmza_add_address_map_editor') {
if (wpgmza_autoCompleteDisabled) { return; }
// if user is using their own API key then use the normal Google AutoComplete
var wpgmza_apikey = false;
if (WPGMZA_localized_data.settings.googleMapsApiKey && WPGMZA_localized_data.settings.googleMapsApiKey !== '') {
wpgmza_apikey = WPGMZA_localized_data.settings.googleMapsApiKey;
return;
} else {
if(e.key === "Escape" || e.key === "Alt" || e.key === "Control" || e.key === "Option" || e.key === "Shift" || e.key === "ArrowLeft" || e.key === "ArrowRight" || e.key === "ArrowUp" || e.key === "ArrowDown") {
$('#wpgmza_autocomplete_search_results').hide();
return;
}
if (!wpgmzaIdentifiedTypingSpeed) {
//determine duration between key strokes to determine when we should send the request to the autocomplete server
//doing this avoids sending API calls for slow typers.
var d = new Date();
// set a timer to reset the delay counter
clearTimeout(wpgmzaTmp);
wpgmzaTmp = setTimeout(function(){
wpgmzaStartTyping = false;
wpgmzaAvgTimeBetweenStrokes = 300;
wpgmzaTotalTimeForKeyStrokes = 0;
},1500
); // I'm pretty sure no one types one key stroke per 1.5 seconds. This should be safe.
if (!wpgmzaStartTyping) {
// first character press, set start time.
wpgmzaStartTyping = d.getTime();
wpgmzaKeyStrokeCount++;
} else {
if (wpgmzaKeyStrokeCount == 1) {
// do nothing because its the first key stroke
} else {
wpgmzaCurrentTimeBetweenStrokes = d.getTime() - wpgmzaStartTyping;
wpgmzaTotalTimeForKeyStrokes = wpgmzaTotalTimeForKeyStrokes + wpgmzaCurrentTimeBetweenStrokes;
wpgmzaAvgTimeBetweenStrokes = (wpgmzaTotalTimeForKeyStrokes / (wpgmzaKeyStrokeCount-1)); // we cannot count the first key as that was the starting point
wpgmzaStartTyping = d.getTime();
if (wpgmzaKeyStrokeCount >= 3) {
// we only need 3 keys to know how fast they type
wpgmzaIdentifiedTypingSpeed = (wpgmzaAvgTimeBetweenStrokes);
}
}
wpgmzaKeyStrokeCount++;
}
return;
}
// clear the previous timer
clearTimeout(wpgmzaAjaxTimeout);
$('#wpgmza_autocomplete_search_results').html('Searching...');
$('#wpgmza_autocomplete_search_results').show();
var currentSearch = jQuery(this).val();
if (currentSearch !== '') {
if(ajaxRequest !== false){
ajaxRequest.abort();
}
var wpgmza_api_url = '';
if (!wpgmza_apikey) {
wpgmza_api_url = "https://wpgmaps.us-3.evennode.com/api/v1/autocomplete?s="+currentSearch+"&d="+window.location.hostname+"&hash="+WPGMZA_localized_data.siteHash
} else {
wpgmza_api_url = "https://wpgmaps.us-3.evennode.com/api/v1/autocomplete?s="+currentSearch+"&d="+window.location.hostname+"&hash="+WPGMZA_localized_data.siteHash+"&k="+wpgmza_apikey
}
// set a timer of how fast the person types in seconds to only continue with this if it runs out
wpgmzaAjaxTimeout = setTimeout(function() {
ajaxRequest = $.ajax({
url: wpgmza_api_url,
type: 'GET',
dataType: 'json', // added data type
success: function(results) {
try {
if (typeof results.error !== 'undefined') {
if (results.error == 'error1') {
$('#wpgmza_autoc_disabled').html(WPGMZA.localized_strings.cloud_api_key_error_1);
$('#wpgmza_autoc_disabled').fadeIn('slow');
$('#wpgmza_autocomplete_search_results').hide();
wpgmza_autoCompleteDisabled = true;
} else {
console.error(results.error);
}
} else {
$('#wpgmza_autocomplete_search_results').html('');
var html = "";
for(var i in results){ html += "<div class='wpgmza_ac_result " + (html === "" ? "" : "border-top") + "' data-id='" + i + "' data-lat='"+results[i]['lat']+"' data-lng='"+results[i]['lng']+"'><div class='wpgmza_ac_container'><div class='wpgmza_ac_icon'><img src='"+results[i]['icon']+"' /></div><div class='wpgmza_ac_item'><span id='wpgmza_item_name_"+i+"' class='wpgmza_item_name'>" + results[i]['place_name'] + "</span><span id='wpgmza_item_address_"+i+"' class='wpgmza_item_address'>" + results[i]['formatted_address'] + "</span></div></div></div>"; }
if(html == ""){ html = "<div class='p-2 text-center'><small>No results found...</small></div>"; }
$('#wpgmza_autocomplete_search_results').html(html);
$('#wpgmza_autocomplete_search_results').show();
}
} catch (exception) {
console.error("WP Google Maps Plugin: There was an error returning the list of places for your search");
}
}
});
},(wpgmzaIdentifiedTypingSpeed*2));
} else {
$('#wpgmza_autocomplete_search_results').hide();
}
}
}
});
// Map height change (for warning)
$("#wpgmza_map_height_type").on("change", function(event) {
self.onMapHeightTypeChange(event);
});
// Don't have instructions in advanced marker panel, it's confusing for debugging and unnecessary
$("#advanced-markers .wpgmza-feature-drawing-instructions").remove();
// Hide the auto search area maximum zoom - not available in Basic. Pro will take care of showing it when needed
$("[data-search-area='auto']").hide();
// Control listeners
$(document.body).on("click", "[data-wpgmza-admin-marker-datatable] input[name='mark']", function(event) {
self.onShiftClick(event);
});
$("#wpgmza_map_type").on("change", function(event) {
self.onMapTypeChanged(event);
});
$("body").on("click",".wpgmza_copy_shortcode", function() {
var $temp = jQuery('<input>');
var $tmp2 = jQuery('<span id="wpgmza_tmp" style="display:none; width:100%; text-align:center;">');
jQuery("body").append($temp);
$temp.val(jQuery(this).val()).select();
document.execCommand("copy");
$temp.remove();
WPGMZA.notification("Shortcode Copied");
});
this.on("markerupdated", function(event) {
self.onMarkerUpdated(event);
});
// NB: Older version of Pro (< 7.0.0 - pre-WPGMZA.Map) will have this.map as undefined. Only run this code if we have a WPGMZA.Map to work with.
if(this.map)
{
this.map.on("zoomchanged", function(event) {
self.onZoomChanged(event);
});
this.map.on("boundschanged", function(event) {
self.onBoundsChanged(event);
});
this.map.on("rightclick", function(event) {
self.onRightClick(event);
});
}
$(element).on("click", ".wpgmza_poly_del_btn", function(event) {
self.onDeletePolygon(event);
});
$(element).on("click", ".wpgmza_polyline_del_btn", function(event) {
self.onDeletePolyline(event);
});
$(element).on("click", ".wpgmza_dataset_del_btn", function(evevnt) {
self.onDeleteHeatmap(event);
});
$(element).on("click", ".wpgmza_circle_del_btn", function(event) {
self.onDeleteCircle(event);
});
$(element).on("click", ".wpgmza_rectangle_del_btn", function(event) {
self.onDeleteRectangle(event);
});
$(element).on("click", "#wpgmza-open-advanced-theme-data", function(event){
event.preventDefault();
$('.wpgmza_theme_data_container').toggleClass('wpgmza_hidden');
});
}
WPGMZA.extend(WPGMZA.MapEditPage, WPGMZA.EventDispatcher);
WPGMZA.MapEditPage.createInstance = function()
{
if(WPGMZA.isProVersion() && WPGMZA.Version.compare(WPGMZA.pro_version, "8.0.0") >= WPGMZA.Version.EQUAL_TO)
return new WPGMZA.ProMapEditPage();
return new WPGMZA.MapEditPage();
}
WPGMZA.MapEditPage.prototype.initDataTables = function()
{
var self = this;
$("[data-wpgmza-datatable][data-wpgmza-rest-api-route]").each(function(index, el) {
var featureType = $(el).attr("data-wpgmza-feature-type");
self[featureType + "AdminDataTable"] = new WPGMZA.AdminFeatureDataTable(el);
});
}
WPGMZA.MapEditPage.prototype.initFeaturePanels = function()
{
var self = this;
$(".wpgmza-feature-accordion[data-wpgmza-feature-type]").each(function(index, el) {
var featurePanelElement = $(el).find(".wpgmza-feature-panel-container > *");
var featureType = $(el).attr("data-wpgmza-feature-type");
var panelClassName = WPGMZA.capitalizeWords(featureType) + "Panel";
var module = WPGMZA[panelClassName];
var instance = module.createInstance(featurePanelElement, self);
self[featureType + "Panel"] = instance;
});
}
WPGMZA.MapEditPage.prototype.initJQueryUIControls = function()
{
var self = this;
var mapContainer;
// Now initialise tabs
$("#wpgmaps_tabs").tabs();
// NB: If the map container has a <ul> then this will break the tabs (this happens in OpenLayers). Temporarily detach the map to avoid this.
mapContainer = $("#wpgmza-map-container").detach();
$("#wpgmaps_tabs_markers").tabs();
// NB: Re-add the map container (see above)
$(".map_wrapper").prepend(mapContainer);
// And the zoom slider
$("#slider-range-max").slider({
range: "max",
min: 1,
max: 21,
value: $("input[name='map_start_zoom']").val(),
slide: function( event, ui ) {
$("input[name='map_start_zoom']").val(ui.value);
self.map.setZoom(ui.value);
}
});
}
WPGMZA.MapEditPage.prototype.onShiftClick = function(event)
{
var checkbox = event.currentTarget;
var row = jQuery(checkbox).closest("tr");
if(this.lastSelectedRow && event.shiftKey)
{
var prevIndex = this.lastSelectedRow.index();
var currIndex = row.index();
var startIndex = Math.min(prevIndex, currIndex);
var endIndex = Math.max(prevIndex, currIndex);
var rows = jQuery("[data-wpgmza-admin-marker-datatable] tbody>tr");
// Clear
jQuery("[data-wpgmza-admin-marker-datatable] input[name='mark']").prop("checked", false);
for(var i = startIndex; i <= endIndex; i++)
jQuery(rows[i]).find("input[name='mark']").prop("checked", true);
}
this.lastSelectedRow = row;
}
WPGMZA.MapEditPage.prototype.onMapTypeChanged = function(event)
{
if(WPGMZA.settings.engine == "open-layers")
return;
var mapTypeId;
switch(event.target.value)
{
case "2":
mapTypeId = google.maps.MapTypeId.SATELLITE;
break;
case "3":
mapTypeId = google.maps.MapTypeId.HYBRID;
break;
case "4":
mapTypeId = google.maps.MapTypeId.TERRAIN;
break;
default:
mapTypeId = google.maps.MapTypeId.ROADMAP;
break;
}
this.map.setOptions({
mapTypeId: mapTypeId
});
}
WPGMZA.MapEditPage.prototype.onMarkerUpdated = function(event)
{
this.markerDataTable.reload();
}
WPGMZA.MapEditPage.prototype.onZoomChanged = function(event) {
$(".map_start_zoom").val(this.map.getZoom());
}
WPGMZA.MapEditPage.prototype.onBoundsChanged = function(event)
{
var location = this.map.getCenter();
$("#wpgmza_start_location").val(location.lat + "," + location.lng);
$("input[name='map_start_lat']").val(location.lat);
$("input[name='map_start_lng']").val(location.lng);
$("#wpgmza_start_zoom").val(this.map.getZoom());
$("#wpgmaps_save_reminder").show();
}
WPGMZA.MapEditPage.prototype.onMapHeightTypeChange = function(event)
{
if(event.target.value == "%")
$("#wpgmza_height_warning").show();
}
WPGMZA.MapEditPage.prototype.onRightClick = function(event)
{
var self = this;
var marker;
if(this.drawingManager && this.drawingManager.mode != WPGMZA.DrawingManager.MODE_MARKER)
return; // Do nothing, not in marker mode
if(!this.rightClickMarker)
{
this.rightClickMarker = WPGMZA.Marker.createInstance({
draggable: true
});
this.rightClickMarker.on("dragend", function(event) {
$(".wpgmza-marker-panel [data-ajax-name='address']").val(event.latLng.lat + "," + event.latLng.lng);
});
this.map.on("click", function(event) {
self.rightClickMarker.setMap(null);
});
}
marker = this.rightClickMarker;
marker.setPosition(event.latLng);
marker.setMap(this.map);
$(".wpgmza-marker-panel [data-ajax-name='address']").val(event.latLng.lat+', '+event.latLng.lng);
}
WPGMZA.MapEditPage.prototype.onDeletePolygon = function(event)
{
var cur_id = parseInt($(this).attr("id"));
var data = {
action: 'delete_poly',
security: wpgmza_legacy_map_edit_page_vars.ajax_nonce,
map_id: this.map.id,
poly_id: cur_id
};
$.post(ajaxurl, data, function (response) {
WPGM_Path[cur_id].setMap(null);
delete WPGM_PathData[cur_id];
delete WPGM_Path[cur_id];
$("#wpgmza_poly_holder").html(response);
});
}
WPGMZA.MapEditPage.prototype.onDeletePolyline = function(event)
{
var cur_id = $(this).attr("id");
var data = {
action: 'delete_polyline',
security: wpgmza_legacy_map_edit_page_vars.ajax_nonce,
map_id: this.map.id,
poly_id: cur_id
};
$.post(ajaxurl, data, function (response) {
WPGM_PathLine[cur_id].setMap(null);
delete WPGM_PathLineData[cur_id];
delete WPGM_PathLine[cur_id];
$("#wpgmza_polyline_holder").html(response);
});
}
WPGMZA.MapEditPage.prototype.onDeleteHeatmap = function(event)
{
var cur_id = $(this).attr("id");
var data = {
action: 'delete_dataset',
security: wpgmza_legacy_map_edit_page_vars.ajax_nonce,
map_id: this.map.id,
poly_id: cur_id
};
$.post(ajaxurl, data, function (response) {
heatmap[cur_id].setMap(null);
delete heatmap[cur_id];
$("#wpgmza_heatmap_holder").html(response);
});
}
WPGMZA.MapEditPage.prototype.onDeleteCircle = function(event)
{
var circle_id = $(this).attr("id");
var data = {
action: 'delete_circle',
security: wpgmza_legacy_map_edit_page_vars.ajax_nonce,
map_id: this.map.id,
circle_id: circle_id
};
$.post(ajaxurl, data, function (response) {
$("#tabs-m-5 table").replaceWith(response);
circle_array.forEach(function (circle) {
if (circle.id == circle_id) {
circle.setMap(null);
return false;
}
});
});
}
WPGMZA.MapEditPage.prototype.onDeleteRectangle = function(event)
{
var rectangle_id = $(this).attr("id");
var data = {
action: 'delete_rectangle',
security: wpgmza_legacy_map_edit_page_vars.ajax_nonce,
map_id: this.map.id,
rectangle_id: rectangle_id
};
$.post(ajaxurl, data, function (response) {
$("#tabs-m-6 table").replaceWith(response);
rectangle_array.forEach(function (rectangle) {
if (rectangle.id == rectangle_id) {
rectangle.setMap(null);
return false;
}
});
});
}
$(document).ready(function(event) {
WPGMZA.mapEditPage = WPGMZA.MapEditPage.createInstance();
});
}); polyline-panel.js 0000666 00000000776 15176076443 0010065 0 ustar 00 /**
* @namespace WPGMZA
* @module PolylinePanel
* @requires WPGMZA.FeaturePanel
*/
jQuery(function($) {
WPGMZA.PolylinePanel = function(element, mapEditPage)
{
WPGMZA.FeaturePanel.apply(this, arguments);
}
WPGMZA.extend(WPGMZA.PolylinePanel, WPGMZA.FeaturePanel);
WPGMZA.PolylinePanel.createInstance = function(element, mapEditPage)
{
if(WPGMZA.isProVersion())
return new WPGMZA.ProPolylinePanel(element, mapEditPage);
return new WPGMZA.PolylinePanel(element, mapEditPage);
}
}); polygon-panel.js 0000666 00000001221 15176076443 0007703 0 ustar 00 /**
* @namespace WPGMZA
* @module PolygonPanel
* @requires WPGMZA.FeaturePanel
*/
jQuery(function($) {
WPGMZA.PolygonPanel = function(element, mapEditPage)
{
WPGMZA.FeaturePanel.apply(this, arguments);
}
WPGMZA.extend(WPGMZA.PolygonPanel, WPGMZA.FeaturePanel);
WPGMZA.PolygonPanel.createInstance = function(element, mapEditPage)
{
if(WPGMZA.isProVersion())
return new WPGMZA.ProPolygonPanel(element, mapEditPage);
return new WPGMZA.PolygonPanel(element, mapEditPage);
}
Object.defineProperty(WPGMZA.PolygonPanel.prototype, "drawingManagerCompleteEvent", {
"get": function() {
return "polygonclosed";
}
});
}); feature-panel.js 0000666 00000040121 15176076443 0007651 0 ustar 00 /**
* @namespace WPGMZA
* @module FeaturePanel
* @requires WPGMZA.EventDispatcher
*/
jQuery(function($) {
WPGMZA.FeaturePanel = function(element, mapEditPage)
{
var self = this;
WPGMZA.EventDispatcher.apply(this, arguments);
this.map = mapEditPage.map;
this.drawingManager = mapEditPage.drawingManager;
this.feature = null;
this.element = element;
this.initDefaults();
this.setMode(WPGMZA.FeaturePanel.MODE_ADD);
this.drawingInstructionsElement = $(this.element).find(".wpgmza-feature-drawing-instructions");
this.drawingInstructionsElement.detach();
this.editingInstructionsElement = $(this.element).find(".wpgmza-feature-editing-instructions");
this.editingInstructionsElement.detach();
$("#wpgmaps_tabs_markers").on("tabsactivate", function(event, ui) {
if($.contains(ui.newPanel[0], self.element[0]))
self.onTabActivated(event);
});
$("#wpgmaps_tabs_markers").on("tabsactivate", function(event, ui) {
if($.contains(ui.oldPanel[0], self.element[0]))
self.onTabDeactivated(event);
});
// NB: Removed to get styling closer
/*$(element).closest(".wpgmza-accordion").find("h3[data-add-caption]").on("click", function(event) {
if(self.mode == "add")
self.onAddFeature(event);
});*/
$(document.body).on("click", "[data-edit-" + this.featureType + "-id]", function(event) {
self.onEditFeature(event);
});
$(document.body).on("click", "[data-delete-" + this.featureType + "-id]", function(event) {
self.onDeleteFeature(event);
});
$(this.element).find(".wpgmza-save-feature").on("click", function(event) {
self.onSave(event);
});
this.drawingManager.on(self.drawingManagerCompleteEvent, function(event) {
self.onDrawingComplete(event);
});
this.drawingManager.on("drawingmodechanged", function(event) {
self.onDrawingModeChanged(event);
});
$(this.element).on("change input", function(event) {
self.onPropertyChanged(event);
});
}
WPGMZA.extend(WPGMZA.FeaturePanel, WPGMZA.EventDispatcher);
WPGMZA.FeaturePanel.MODE_ADD = "add";
WPGMZA.FeaturePanel.MODE_EDIT = "edit";
WPGMZA.FeaturePanel.prevEditableFeature = null;
Object.defineProperty(WPGMZA.FeaturePanel.prototype, "featureType", {
"get": function() {
return $(this.element).attr("data-wpgmza-feature-type");
}
});
Object.defineProperty(WPGMZA.FeaturePanel.prototype, "drawingManagerCompleteEvent", {
"get": function() {
return this.featureType + "complete";
}
});
Object.defineProperty(WPGMZA.FeaturePanel.prototype, "featureDataTable", {
"get": function() {
return $("[data-wpgmza-datatable][data-wpgmza-feature-type='" + this.featureType + "']")[0].wpgmzaDataTable;
}
});
Object.defineProperty(WPGMZA.FeaturePanel.prototype, "featureAccordion", {
"get": function() {
return $(this.element).closest(".wpgmza-accordion");
}
});
Object.defineProperty(WPGMZA.FeaturePanel.prototype, "map", {
"get": function() {
return WPGMZA.mapEditPage.map;
}
});
Object.defineProperty(WPGMZA.FeaturePanel.prototype, "mode", {
"get": function() {
return this._mode;
}
});
WPGMZA.FeaturePanel.prototype.initPreloader = function()
{
if(this.preloader)
return;
this.preloader = $(WPGMZA.preloaderHTML);
this.preloader.hide();
$(this.element).append(this.preloader);
}
WPGMZA.FeaturePanel.prototype.initDataTable = function()
{
var el = $(this.element).find("[data-wpgmza-datatable][data-wpgmza-rest-api-route]");
this[this.featureType + "AdminDataTable"] = new WPGMZA.AdminFeatureDataTable( el );
}
WPGMZA.FeaturePanel.prototype.initDefaults = function()
{
$(this.element).find("[data-ajax-name]:not([type='radio'])").each(function(index, el) {
var val = $(el).val();
if(!val)
return;
$(el).attr("data-default-value", val);
});
}
WPGMZA.FeaturePanel.prototype.setCaptionType = function(type, id)
{
var args = arguments;
var icons = {
add: "fa-plus-circle",
save: "fa-pencil-square-o"
};
switch(type)
{
case WPGMZA.FeaturePanel.MODE_ADD:
case WPGMZA.FeaturePanel.MODE_EDIT:
this.featureAccordion.find("[data-add-caption][data-edit-caption]").each(function(index, el) {
var text = $(el).attr("data-" + type + "-caption");
var icon = $(el).find("i.fa");
if(id)
text += " " + id;
$(el).text(text);
if(icon.length)
{
// Need to recreate the icon as text() will have wiped it out
icon = $("<i class='fa' aria-hidden='true'></i>");
icon.addClass(icons[type]);
$(el).prepend(" ");
$(el).prepend(icon);
}
});
break;
default:
throw new Error("Invalid type");
break;
}
}
WPGMZA.FeaturePanel.prototype.setMode = function(type, id)
{
this._mode = type;
this.setCaptionType(type, id);
}
WPGMZA.FeaturePanel.prototype.setTargetFeature = function(feature)
{
var self = this;
// TODO: Implement fitBounds for all features
//var bounds = feature.getBounds();
//map.fitBounds(bounds);
if(WPGMZA.FeaturePanel.prevEditableFeature) {
var prev = WPGMZA.FeaturePanel.prevEditableFeature;
prev.setEditable(false);
prev.setDraggable(false);
prev.off("change");
}
if(feature) {
feature.setEditable(true);
feature.setDraggable(true);
feature.on("change", function(event) {
self.onFeatureChanged(event);
});
this.setMode(WPGMZA.FeaturePanel.MODE_EDIT);
this.drawingManager.setDrawingMode(WPGMZA.DrawingManager.MODE_NONE);
this.showInstructions();
}
else {
this.setMode(WPGMZA.FeaturePanel.MODE_ADD);
}
this.feature = WPGMZA.FeaturePanel.prevEditableFeature = feature;
}
WPGMZA.FeaturePanel.prototype.reset = function()
{
$(this.element).find("[data-ajax-name]:not([data-ajax-name='map_id']):not([type='color']):not([type='checkbox']):not([type='radio'])").val("");
$(this.element).find("select[data-ajax-name]>option:first-child").prop("selected", true);
$(this.element).find("[data-ajax-name='id']").val("-1");
$(this.element).find("input[type='checkbox']").prop("checked", false);
if(tinyMCE.get("wpgmza-description-editor"))
tinyMCE.get("wpgmza-description-editor").setContent("");
else
$("#wpgmza-description-editor").val("");
$('#wpgmza-description-editor').val("");
this.showPreloader(false);
this.setMode(WPGMZA.FeaturePanel.MODE_ADD);
$(this.element).find("[data-ajax-name][data-default-value]").each(function(index, el) {
$(el).val( $(el).data("default-value") );
});
}
WPGMZA.FeaturePanel.prototype.select = function(arg) {
var id, expectedBaseClass, self = this;
this.reset();
if($.isNumeric(arg))
id = arg;
else
{
expectedBaseClass = WPGMZA[ WPGMZA.capitalizeWords(this.featureType) ];
if(!(feature instanceof expectedBaseClass))
throw new Error("Invalid feature type for this panel");
id = arg.id;
}
this.showPreloader(true);
WPGMZA.animateScroll($(".wpgmza_map"));
WPGMZA.restAPI.call("/" + this.featureType + "s/" + id + "?skip_cache=1", {
success: function(data, status, xhr) {
var functionSuffix = WPGMZA.capitalizeWords(self.featureType);
var getByIDFunction = "get" + functionSuffix + "ByID";
var feature = self.map[getByIDFunction](id);
self.populate(data);
self.showPreloader(false);
self.setMode(WPGMZA.FeaturePanel.MODE_EDIT, id);
self.setTargetFeature(feature);
}
});
}
WPGMZA.FeaturePanel.prototype.showPreloader = function(show)
{
this.initPreloader();
if(arguments.length == 0 || show)
{
this.preloader.fadeIn();
this.element.addClass("wpgmza-loading");
}
else
{
this.preloader.fadeOut();
this.element.removeClass("wpgmza-loading");
}
}
WPGMZA.FeaturePanel.prototype.populate = function(data)
{
var value, target, name;
for(name in data)
{
target = $(this.element).find("[data-ajax-name='" + name + "']");
value = data[name];
switch((target.attr("type") || "").toLowerCase())
{
case "checkbox":
case "radio":
target.prop("checked", data[name] == 1);
break;
case "color":
// NB: Account for legacy color format
if(!value.match(/^#/))
value = "#" + value;
default:
if(typeof value == "object")
value = JSON.stringify(value);
$(this.element).find("[data-ajax-name='" + name + "']:not(select)").val(value);
$(this.element).find("select[data-ajax-name='" + name + "']").each(function(index, el) {
if(typeof value == "string" && data[name].length == 0)
return;
$(el).val(value);
});
break;
}
}
}
WPGMZA.FeaturePanel.prototype.serializeFormData = function()
{
var fields = $(this.element).find("[data-ajax-name]");
var data = {};
fields.each(function(index, el) {
var type = "text";
if($(el).attr("type"))
type = $(el).attr("type").toLowerCase();
switch(type)
{
case "checkbox":
data[$(el).attr("data-ajax-name")] = $(el).prop("checked") ? 1 : 0;
break;
case "radio":
if($(el).prop("checked"))
data[$(el).attr("data-ajax-name")] = $(el).val();
break;
default:
data[$(el).attr("data-ajax-name")] = $(el).val()
break;
}
});
return data;
}
WPGMZA.FeaturePanel.prototype.discardChanges = function() {
if(!this.feature)
return;
var feature = this.feature;
this.setTargetFeature(null);
if(feature && feature.map)
{
this.map["remove" + WPGMZA.capitalizeWords(this.featureType)](feature);
if(feature.id > -1)
this.updateFeatureByID(feature.id);
}
}
WPGMZA.FeaturePanel.prototype.updateFeatureByID = function(id)
{
var self = this;
var feature;
var route = "/" + this.featureType + "s/";
var functionSuffix = WPGMZA.capitalizeWords(self.featureType);
var getByIDFunction = "get" + functionSuffix + "ByID";
var removeFunction = "remove" + functionSuffix;
var addFunction = "add" + functionSuffix;
WPGMZA.restAPI.call(route + id, {
success: function(data, status, xhr) {
if(feature = self.map[getByIDFunction](id))
self.map[removeFunction](feature);
feature = WPGMZA[WPGMZA.capitalizeWords(self.featureType)].createInstance(data);
self.map[addFunction](feature);
}
});
}
WPGMZA.FeaturePanel.prototype.showInstructions = function()
{
switch(this.mode)
{
case WPGMZA.FeaturePanel.MODE_ADD:
$(this.map.element).append(this.drawingInstructionsElement);
$(this.drawingInstructionsElement).hide().fadeIn();
break;
default:
$(this.map.element).append(this.editingInstructionsElement);
$(this.editingInstructionsElement).hide().fadeIn();
break;
}
}
WPGMZA.FeaturePanel.prototype.onTabActivated = function() {
this.reset();
this.drawingManager.setDrawingMode(this.featureType);
this.onAddFeature(event);
$(".wpgmza-table-container-title").hide();
$(".wpgmza-table-container").hide();
var featureString = this.featureType.charAt(0).toUpperCase() + this.featureType.slice(1);
$("#wpgmza-table-container-"+featureString).show();
$("#wpgmza-table-container-title-"+featureString).show();
}
WPGMZA.FeaturePanel.prototype.onTabDeactivated = function()
{
this.discardChanges();
this.setTargetFeature(null);
}
WPGMZA.FeaturePanel.prototype.onAddFeature = function(event)
{
this.drawingManager.setDrawingMode(this.featureType);
//if(this.featureType != "marker")
// WPGMZA.animateScroll(WPGMZA.mapEditPage.map.element);
}
WPGMZA.FeaturePanel.prototype.onEditFeature = function(event)
{
var self = this;
var name = "data-edit-" + this.featureType + "-id";
var id = $(event.currentTarget).attr(name);
this.discardChanges();
this.select(id);
}
WPGMZA.FeaturePanel.prototype.onDeleteFeature = function(event)
{
var self = this;
var name = "data-delete-" + this.featureType + "-id";
var id = $(event.currentTarget).attr(name);
var route = "/" + this.featureType + "s/";
var feature = this.map["get" + WPGMZA.capitalizeWords(this.featureType) + "ByID"](id);
this.featureDataTable.dataTable.processing(true);
WPGMZA.restAPI.call(route + id, {
method: "DELETE",
success: function(data, status, xhr) {
self.map["remove" + WPGMZA.capitalizeWords(self.featureType)](feature);
self.featureDataTable.reload();
}
});
}
WPGMZA.FeaturePanel.prototype.onDrawingModeChanged = function(event)
{
$(this.drawingInstructionsElement).detach();
$(this.editingInstructionsElement).detach();
if(this.drawingManager.mode == this.featureType)
{
this.showInstructions();
}
}
WPGMZA.FeaturePanel.prototype.onDrawingComplete = function(event)
{
var self = this;
var property = "engine" + WPGMZA.capitalizeWords(this.featureType);
var engineFeature = event[property];
var formData = this.serializeFormData();
var geometryField = $(self.element).find("textarea[data-ajax-name$='data']");
delete formData.polydata;
var nativeFeature = WPGMZA[WPGMZA.capitalizeWords(this.featureType)].createInstance(
formData,
engineFeature
);
this.drawingManager.setDrawingMode(WPGMZA.DrawingManager.MODE_NONE);
this.map["add" + WPGMZA.capitalizeWords(this.featureType)](nativeFeature);
this.setTargetFeature(nativeFeature);
// NB: This only applies to some features, maybe updateGeometryFields would be better
if(geometryField.length)
geometryField.val(JSON.stringify(nativeFeature.getGeometry()));
if(this.featureType != "marker") {
//WPGMZA.animateScroll( $(this.element).closest(".wpgmza-accordion") );
}
}
WPGMZA.FeaturePanel.prototype.onPropertyChanged = function(event)
{
var self = this;
var feature = this.feature;
if(!feature)
return; // No feature, we're likely in drawing mode and not editing a feature right now
// Gather all the fields from our inputs and set those properties on the feature
$(this.element)
.find(":input[data-ajax-name]")
.each(function(index, el) {
var key = $(el).attr("data-ajax-name");
feature[key] = $(el).val();
});
// Now cause the feature to update itself
feature.updateNativeFeature();
}
WPGMZA.FeaturePanel.prototype.onFeatureChanged = function(event)
{
var geometryField = $(this.element).find("textarea[data-ajax-name$='data']");
if(!geometryField.length)
return;
geometryField.val(JSON.stringify(this.feature.getGeometry()));
}
WPGMZA.FeaturePanel.prototype.onSave = function(event) {
var self = this;
var id = $(self.element).find("[data-ajax-name='id']").val();
var data = this.serializeFormData();
var route = "/" + this.featureType + "s/";
var isNew = id == -1;
if (this.featureType == 'circle') {
if (!data.center) {
alert(WPGMZA.localized_strings.no_shape_circle);
return;
}
}
if (this.featureType == 'rectangle') {
if (!data.cornerA) {
alert(WPGMZA.localized_strings.no_shape_rectangle);
return;
}
}
if (this.featureType == 'polygon') {
if (!data.polydata) {
alert(WPGMZA.localized_strings.no_shape_polygon);
return;
}
}
if (this.featureType == 'polyline') {
if (!data.polydata) {
alert(WPGMZA.localized_strings.no_shape_polyline);
return;
}
}
if(!isNew)
route += id;
WPGMZA.mapEditPage.drawingManager.setDrawingMode(WPGMZA.DrawingManager.MODE_NONE);
this.showPreloader(true);
WPGMZA.restAPI.call(route, {
method: "POST",
data: data,
success: function(data, status, xhr) {
var feature;
var functionSuffix = WPGMZA.capitalizeWords(self.featureType);
var getByIDFunction = "get" + functionSuffix + "ByID";
var removeFunction = "remove" + functionSuffix;
var addFunction = "add" + functionSuffix;
self.reset();
if(feature = self.map[getByIDFunction](id))
self.map[removeFunction](feature);
self.setTargetFeature(null);
self.showPreloader(false);
feature = WPGMZA[WPGMZA.capitalizeWords(self.featureType)].createInstance(data);
self.map[addFunction](feature);
self.featureDataTable.reload();
self.onTabActivated(event);
}
})
}
});
marker-panel.js 0000666 00000013701 15176076443 0007503 0 ustar 00 /**
* @namespace WPGMZA
* @module MarkerPanel
* @requires WPGMZA.FeaturePanel
*/
jQuery(function($) {
WPGMZA.MarkerPanel = function(element, mapEditPage)
{
WPGMZA.FeaturePanel.apply(this, arguments);
}
WPGMZA.extend(WPGMZA.MarkerPanel, WPGMZA.FeaturePanel);
WPGMZA.MarkerPanel.createInstance = function(element, mapEditPage)
{
if(WPGMZA.isProVersion())
return new WPGMZA.ProMarkerPanel(element, mapEditPage);
return new WPGMZA.MarkerPanel(element, mapEditPage);
}
WPGMZA.MarkerPanel.prototype.initDefaults = function(){
var self = this;
WPGMZA.FeaturePanel.prototype.initDefaults.apply(this, arguments);
this.adjustSubMode = false;
this.onTabActivated(null);
$(document.body).on("click", "[data-adjust-" + this.featureType + "-id]", function(event) {
self.onAdjustFeature(event);
});
$(document.body).on("click", ".wpgmza_approve_btn", function(event) {
self.onApproveMarker(event);
});
}
WPGMZA.MarkerPanel.prototype.onAdjustFeature = function(event){
var self = this;
var name = "data-adjust-" + this.featureType + "-id";
var id = $(event.currentTarget).attr(name);
this.discardChanges();
this.adjustSubMode = true;
this.select(id);
}
WPGMZA.MarkerPanel.prototype.onApproveMarker = function(event){
var self = this;
var route = "/" + this.featureType + "s/" + $(event.currentTarget).attr('id');
WPGMZA.restAPI.call(route, {
method: "POST",
data: {
approved : "1"
},
success: function(data, status, xhr) {
self.featureDataTable.reload();
}
});
}
WPGMZA.MarkerPanel.prototype.onFeatureChanged = function(event){
if(this.adjustSubMode){
var aPos = this.feature.getPosition();
if(aPos){
$(this.element).find("[data-ajax-name='lat']").val(aPos.lat);
$(this.element).find("[data-ajax-name='lng']").val(aPos.lng);
}
// Exit early, we don't want to adjust the address
return;
}
var addressField = $(this.element).find("input[data-ajax-name$='address']");
if(!addressField.length)
return;
var pos = this.feature.getPosition();
addressField.val(pos.lat + ',' + pos.lng);
}
WPGMZA.MarkerPanel.prototype.setTargetFeature = function(feature){
if(WPGMZA.FeaturePanel.prevEditableFeature){
var prev = WPGMZA.FeaturePanel.prevEditableFeature;
if(prev.setOpacity){
prev.setOpacity(1);
}
}
/**
* We could probably make this adjust mode code more elegant in the future
*
* Temporary solution as it is causing trouble for clients
*
* Date: 2021-01-15
*/
$(this.element).find('[data-ajax-name]').removeAttr('disabled');
$(this.element).find('fieldset').show();
$(this.element).find('.wpgmza-adjust-mode-notice').addClass('wpgmza-hidden');
$(this.element).find('[data-ajax-name="lat"]').attr('type', 'hidden');
$(this.element).find('[data-ajax-name="lng"]').attr('type', 'hidden');
$(this.element).find('.wpgmza-hide-in-adjust-mode').removeClass('wpgmza-hidden');
$(this.element).find('.wpgmza-show-in-adjust-mode').addClass('wpgmza-hidden');
if(feature){
if(feature.setOpacity){
feature.setOpacity(0.7);
}
feature.getMap().panTo(feature.getPosition());
if(this.adjustSubMode){
$(this.element).find('[data-ajax-name]').attr('disabled', 'disabled');
$(this.element).find('fieldset:not(.wpgmza-always-on)').hide();
$(this.element).find('.wpgmza-adjust-mode-notice').removeClass('wpgmza-hidden');
$(this.element).find('[data-ajax-name="lat"]').attr('type', 'text').removeAttr('disabled');
$(this.element).find('[data-ajax-name="lng"]').attr('type', 'text').removeAttr('disabled');
$(this.element).find('.wpgmza-hide-in-adjust-mode').addClass('wpgmza-hidden');
$(this.element).find('.wpgmza-show-in-adjust-mode').removeClass('wpgmza-hidden');
}
} else {
this.adjustSubMode = false;
}
WPGMZA.FeaturePanel.prototype.setTargetFeature.apply(this, arguments);
}
WPGMZA.MarkerPanel.prototype.onSave = function(event)
{
var self = this;
var geocoder = WPGMZA.Geocoder.createInstance();
var address = $(this.element).find("[data-ajax-name='address']").val();
var geocodingData = {
address: address
}
WPGMZA.mapEditPage.drawingManager.setDrawingMode(WPGMZA.DrawingManager.MODE_NONE);
this.showPreloader(true);
// New cloud functions
var cloud_lat = false;
var cloud_lng = false;
// is the lat and lng set from the WPGM Cloud Search?
if (document.getElementsByName("lat").length > 0) { cloud_lat = document.getElementsByName("lat")[0].value; }
if (document.getElementsByName("lng").length > 0) { cloud_lng = document.getElementsByName("lng")[0].value; }
if (cloud_lat && cloud_lng) {
if(!WPGMZA_localized_data.settings.googleMapsApiKey || WPGMZA_localized_data.settings.googleMapsApiKey === ''){
//Let's only do this if it's not their own key, this causes issues with repositioning a marker
geocodingData.lat = parseFloat(cloud_lat);
geocodingData.lng = parseFloat(cloud_lng);
}
}
if(this.adjustSubMode){
// Trust the force!
WPGMZA.FeaturePanel.prototype.onSave.apply(self, arguments);
} else {
geocoder.geocode(geocodingData, function(results, status) {
switch(status)
{
case WPGMZA.Geocoder.ZERO_RESULTS:
alert(WPGMZA.localized_strings.zero_results);
self.showPreloader(false);
return;
break;
case WPGMZA.Geocoder.SUCCESS:
break;
case WPGMZA.Geocoder.NO_ADDRESS:
alert(WPGMZA.localized_strings.no_address);
self.showPreloader(false);
return;
break;
case WPGMZA.Geocoder.FAIL:
default:
alert(WPGMZA.localized_strings.geocode_fail);
self.showPreloader(false);
return;
break;
}
var result = results[0];
$(self.element).find("[data-ajax-name='lat']").val(result.lat);
$(self.element).find("[data-ajax-name='lng']").val(result.lng);
WPGMZA.FeaturePanel.prototype.onSave.apply(self, arguments);
});
}
WPGMZA.mapEditPage.map.resetBounds();
}
}); circle-panel.js 0000666 00000002373 15176076443 0007466 0 ustar 00 /**
* @namespace WPGMZA
* @module CirclePanel
* @requires WPGMZA.FeaturePanel
*/
jQuery(function($) {
WPGMZA.CirclePanel = function(element, mapEditPage)
{
WPGMZA.FeaturePanel.apply(this, arguments);
}
WPGMZA.extend(WPGMZA.CirclePanel, WPGMZA.FeaturePanel);
WPGMZA.CirclePanel.createInstance = function(element, mapEditPage)
{
if(WPGMZA.isProVersion())
return new WPGMZA.ProCirclePanel(element, mapEditPage);
return new WPGMZA.CirclePanel(element, mapEditPage);
}
WPGMZA.CirclePanel.prototype.updateFields = function()
{
$(this.element).find("[data-ajax-name='center']").val( this.feature.getCenter().toString() );
$(this.element).find("[data-ajax-name='radius']").val( this.feature.getRadius() );
}
WPGMZA.CirclePanel.prototype.onDrawingComplete = function(event)
{
WPGMZA.FeaturePanel.prototype.onDrawingComplete.apply(this, arguments);
this.updateFields();
}
WPGMZA.CirclePanel.prototype.setTargetFeature = function(feature){
WPGMZA.FeaturePanel.prototype.setTargetFeature.apply(this, arguments);
if(feature){
this.updateFields();
}
}
WPGMZA.CirclePanel.prototype.onFeatureChanged = function(event)
{
WPGMZA.FeaturePanel.prototype.onFeatureChanged.apply(this, arguments);
this.updateFields();
}
}); rectangle-panel.js 0000666 00000002623 15176076443 0010167 0 ustar 00 /**
* @namespace WPGMZA
* @module RectanglePanel
* @requires WPGMZA.FeaturePanel
*/
jQuery(function($) {
WPGMZA.RectanglePanel = function(element, mapEditPage)
{
WPGMZA.FeaturePanel.apply(this, arguments);
}
WPGMZA.extend(WPGMZA.RectanglePanel, WPGMZA.FeaturePanel);
WPGMZA.RectanglePanel.createInstance = function(element, mapEditPage)
{
if(WPGMZA.isProVersion())
return new WPGMZA.ProRectanglePanel(element, mapEditPage);
return new WPGMZA.RectanglePanel(element, mapEditPage);
}
WPGMZA.RectanglePanel.prototype.updateFields = function()
{
var bounds = this.feature.getBounds();
if(bounds.north && bounds.west && bounds.south && bounds.east){
$(this.element).find("[data-ajax-name='cornerA']").val( bounds.north + ", " + bounds.west );
$(this.element).find("[data-ajax-name='cornerB']").val( bounds.south + ", " + bounds.east );
}
}
WPGMZA.RectanglePanel.prototype.setTargetFeature = function(feature){
WPGMZA.FeaturePanel.prototype.setTargetFeature.apply(this, arguments);
if(feature){
this.updateFields();
}
}
WPGMZA.RectanglePanel.prototype.onDrawingComplete = function(event)
{
WPGMZA.FeaturePanel.prototype.onDrawingComplete.apply(this, arguments);
this.updateFields();
}
WPGMZA.RectanglePanel.prototype.onFeatureChanged = function(event)
{
WPGMZA.FeaturePanel.prototype.onFeatureChanged.apply(this, arguments);
this.updateFields();
}
});