File: /var/www/html/shootinschool/wp-content/plugins/wp-google-maps/js/v8/modern-store-locator.js
/**
* @namespace WPGMZA
* @module ModernStoreLocator
* @requires WPGMZA
* @pro-requires WPGMZA.UseMyLocationButton
*/
jQuery(function($) {
/**
* The new modern look store locator. It takes the elements from the default look and moves them into the map, wrapping in a new element so we can apply new styles. <strong>Please <em>do not</em> call this constructor directly. Always use createInstance rather than instantiating this class directly.</strong> Using createInstance allows this class to be externally extensible.
* @class WPGMZA.ModernStoreLocator
* @constructor WPGMZA.ModernStoreLocator
* @memberof WPGMZA
* @param {int} map_id The ID of the map this store locator belongs to
*/
WPGMZA.ModernStoreLocator = function(map_id)
{
var self = this;
var original;
var map = WPGMZA.getMapByID(map_id);
WPGMZA.assertInstanceOf(this, "ModernStoreLocator");
if(WPGMZA.isProVersion())
original = $(".wpgmza_sl_search_button[mid='" + map_id + "'], .wpgmza_sl_search_button_" + map_id).closest(".wpgmza_sl_main_div");
else
original = $(".wpgmza_sl_search_button").closest(".wpgmza_sl_main_div");
if(!original.length)
return;
// Build / re-arrange elements
this.element = $("<div class='wpgmza-modern-store-locator'><div class='wpgmza-inner wpgmza-modern-hover-opaque'/></div>")[0];
var inner = $(this.element).find(".wpgmza-inner");
var addressInput;
if(WPGMZA.isProVersion())
addressInput = $(original).find(".addressInput");
else
addressInput = $(original).find("#addressInput");
if(map.settings.store_locator_query_string && map.settings.store_locator_query_string.length)
addressInput.attr("placeholder", map.settings.store_locator_query_string);
inner.append(addressInput);
var titleSearch = $(original).find("[id='nameInput_" + map_id + "']");
if(titleSearch.length)
{
var placeholder = map.settings.store_locator_name_string;
if(placeholder && placeholder.length)
titleSearch.attr("placeholder", placeholder);
inner.append(titleSearch);
}
var button;
if(button = $(original).find("button.wpgmza-use-my-location"))
inner.append(button);
$(addressInput).on("keydown keypress", function(event) {
if(event.keyCode == 13 && self.searchButton.is(":visible"))
self.searchButton.trigger("click");
});
$(addressInput).on("input", function(event) {
self.searchButton.show();
self.resetButton.hide();
});
inner.append($(original).find("select.wpgmza_sl_radius_select"));
// inner.append($(original).find(".wpgmza_filter_select_" + map_id));
// Buttons
this.searchButton = $(original).find( ".wpgmza_sl_search_button, .wpgmza_sl_search_button_div" );
inner.append(this.searchButton);
this.resetButton = $(original).find( ".wpgmza_sl_reset_button_div" );
inner.append(this.resetButton);
this.resetButton.on("click", function(event) {
resetLocations(map_id);
});
this.resetButton.hide();
if(WPGMZA.isProVersion())
{
this.searchButton.on("click", function(event) {
if($("addressInput_" + map_id).val() == 0)
return;
self.searchButton.hide();
self.resetButton.show();
map.storeLocator.state = WPGMZA.StoreLocator.STATE_APPLIED;
});
this.resetButton.on("click", function(event) {
self.resetButton.hide();
self.searchButton.show();
map.storeLocator.state = WPGMZA.StoreLocator.STATE_INITIAL;
});
}
// Distance type
inner.append($("#wpgmza_distance_type_" + map_id));
// Categories
var container = $(original).find(".wpgmza_cat_checkbox_holder");
var ul = $(container).children("ul");
var items = $(container).find("li");
var numCategories = 0;
//$(items).find("ul").remove();
//$(ul).append(items);
var icons = [];
items.each(function(index, el) {
var id = $(el).attr("class").match(/\d+/);
for(var category_id in wpgmza_category_data) {
if(id == category_id) {
var src = wpgmza_category_data[category_id].image;
var icon = $('<div class="wpgmza-chip-icon"/>');
icon.css({
"background-image": "url('" + src + "')",
"width": $("#wpgmza_cat_checkbox_" + category_id + " + label").height() + "px"
});
icons.push(icon);
if(src != null && src != ""){
//$(el).find("label").prepend(icon);
$("#wpgmza_cat_checkbox_" + category_id + " + label").prepend(icon);
}
numCategories++;
break;
}
}
});
$(this.element).append(container);
if(numCategories) {
this.optionsButton = $('<span class="wpgmza_store_locator_options_button"><i class="fa fa-list"></i></span>');
$(this.searchButton).before(this.optionsButton);
}
setInterval(function() {
icons.forEach(function(icon) {
var height = $(icon).height();
$(icon).css({"width": height + "px"});
$(icon).closest("label").css({"padding-left": height + 8 + "px"});
});
$(container).css("width", $(self.element).find(".wpgmza-inner").outerWidth() + "px");
}, 1000);
$(this.element).find(".wpgmza_store_locator_options_button").on("click", function(event) {
if(container.hasClass("wpgmza-open"))
container.removeClass("wpgmza-open");
else
container.addClass("wpgmza-open");
});
// Remove original element
$(original).remove();
// Event listeners
$(this.element).find("input, select").on("focus", function() {
$(inner).addClass("active");
});
$(this.element).find("input, select").on("blur", function() {
$(inner).removeClass("active");
});
$(this.element).on("mouseover", "li.wpgmza_cat_checkbox_item_holder", function(event) {
self.onMouseOverCategory(event);
});
$(this.element).on("mouseleave", "li.wpgmza_cat_checkbox_item_holder", function(event) {
self.onMouseLeaveCategory(event);
});
$('body').on('click', '.wpgmza_store_locator_options_button', function(event) {
setTimeout(function(){
if ($('.wpgmza_cat_checkbox_holder').hasClass('wpgmza-open')) {
var p_cat = $( ".wpgmza_cat_checkbox_holder" );
var position_cat = p_cat.position().top + p_cat.outerHeight(true) + $('.wpgmza-modern-store-locator').height();
var $p_map = $('.wpgmza_map');
var position_map = $p_map.position().top + $p_map.outerHeight(true);
var cat_height = position_cat;
if (cat_height >= position_map) {
$('.wpgmza_cat_ul').css('overflow', 'scroll ');
$('.wpgmza_cat_ul').css('height', '100%');
$('.wpgmza-modern-store-locator').css('height','100%');
$('.wpgmza_cat_checkbox_holder.wpgmza-open').css({'padding-bottom': '50px', 'height': '100%'});
}
}
}, 500);
});
}
/**
* Creates an instance of a modern store locator, <strong>please <em>always</em> use this function rather than calling the constructor directly</strong>.
* @method
* @memberof WPGMZA.ModernStoreLocator
* @param {int} map_id The ID of the map this store locator belongs to
* @return {WPGMZA.ModernStoreLocator} An instance of WPGMZA.ModernStoreLocator
*/
WPGMZA.ModernStoreLocator.createInstance = function(map_id) {
switch(WPGMZA.settings.engine)
{
case "open-layers":
return new WPGMZA.OLModernStoreLocator(map_id);
break;
default:
return new WPGMZA.GoogleModernStoreLocator(map_id);
break;
}
}
// TODO: Move these to a Pro module
WPGMZA.ModernStoreLocator.prototype.onMouseOverCategory = function(event)
{
var li = event.currentTarget;
$(li).children("ul.wpgmza_cat_checkbox_item_holder").stop(true, false).fadeIn();
}
WPGMZA.ModernStoreLocator.prototype.onMouseLeaveCategory = function(event)
{
var li = event.currentTarget;
$(li).children("ul.wpgmza_cat_checkbox_item_holder").stop(true, false).fadeOut();
}
});