/* * 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);