/*
* 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 = document.cookie.match(/aviacookiesilentconsent/);
if( cookie_check && ! silent_accept_cookie )
{
if( ! document.cookie.match(/aviacookieconsent/) || sessionstorage.getitem( 'aviacookierefused' ) )
{
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);