/*
* This file holds javascript functions needed in frontend for the functionallity of the Google Maps widgets and shortcodes
* Handles conditional loading of Google API script.
*
* @author Christian "Kriesi" Budschedl
* @copyright Copyright ( c ) Christian Budschedl
* @link http://kriesi.at
* @link http://aviathemes.com
* @since Version 1.0
* @package AviaFramework
*
*/
"use strict";
/**
* Avia Google Maps in frontend
*/
(function($)
{
var objAviaGoogleMaps = null;
var AviaGoogleMaps = function(){
if( 'undefined' == typeof window.av_google_map || 'undefined' == typeof avia_framework_globals )
{
return;
}
if( objAviaGoogleMaps != null )
{
return;
}
objAviaGoogleMaps = this;
this.document = $( document );
this.script_loading = false;
this.script_loaded = false;
this.script_source = avia_framework_globals.gmap_avia_api;
this.maps = {};
this.loading_icon_html = '
';
this.LoadAviaMapsAPIScript();
};
AviaGoogleMaps.prototype = {
LoadAviaMapsAPIScript: function()
{
this.maps = $('body').find( '.avia-google-map-container' );
if( this.maps.length == 0 )
{
return;
}
// Check if we need to load the api or we have only links to Google Maps page
var needToLoad = false;
this.maps.each(function( index ) {
var container = $(this);
if( container.hasClass('av_gmaps_show_unconditionally') || container.hasClass('av_gmaps_show_delayed') )
{
needToLoad = true;
return false;
}
});
if( ! needToLoad )
{
return;
}
/* check if maps are disabled by user setting via cookie - or user must opt in. */
var cookie_check = $('html').hasClass('av-cookies-needs-opt-in') || $('html').hasClass('av-cookies-can-opt-out');
var allow_continue = true;
var silent_accept_cookie = $('html').hasClass('av-cookies-user-silent-accept');
if( cookie_check && ! silent_accept_cookie )
{
if( ! document.cookie.match(/aviaCookieConsent/) || $('html').hasClass('av-cookies-session-refused') )
{
allow_continue = false;
}
else
{
if( ! document.cookie.match(/aviaPrivacyRefuseCookiesHideBar/) )
{
allow_continue = false;
}
else if( ! document.cookie.match(/aviaPrivacyEssentialCookiesEnabled/) )
{
allow_continue = false;
}
else if( document.cookie.match(/aviaPrivacyGoogleMapsDisabled/) )
{
allow_continue = false;
}
}
}
if( ! allow_continue )
{
$('.av_gmaps_main_wrap').addClass('av-maps-user-disabled');
return;
}
// Check if our API already loaded
if( typeof $.AviaMapsAPI != 'undefined' )
{
this.AviaMapsScriptLoaded();
return;
}
$('body').on( 'avia-google-maps-api-script-loaded', $.proxy( this.AviaMapsScriptLoaded, this ));
this.script_loading = true;
var script = document.createElement('script');
script.id = 'avia-gmaps-api-script';
script.type = 'text/javascript';
script.src = this.script_source;
document.body.appendChild(script);
},
AviaMapsScriptLoaded: function()
{
this.script_loading = false;
this.script_loaded = true;
var object = this;
// Now we bind maps with AviaMapsAPI via aviaMaps
this.maps.each(function( index ) {
var container = $(this);
if( container.hasClass('av_gmaps_show_page_only') )
{
return;
}
var mapid = container.data('mapid');
// skip container if no map info found
if( 'undefined' == typeof window.av_google_map[mapid] )
{
console.log( 'Map cannot be displayed because no info: ' + mapid);
return;
}
if( container.hasClass('av_gmaps_show_unconditionally') )
{
container.aviaMaps();
// container.removeClass('av_gmaps_show_unconditionally');
}
else if( container.hasClass('av_gmaps_show_delayed') )
{
var wrap = container.closest('.av_gmaps_main_wrap');
var confirm = wrap.find('a.av_text_confirm_link');
confirm.on('click', object.AviaMapsLoadConfirmed );
}
else
{
console.log( 'Map cannot be displayed because missing display class: ' + mapid);
}
});
},
AviaMapsLoadConfirmed: function( event )
{
event.preventDefault();
var confirm = $(this);
var container = confirm.closest('.av_gmaps_main_wrap').find('.avia-google-map-container');
container.aviaMaps();
}
};
$(function()
{
new AviaGoogleMaps();
});
})(jQuery);