(function waitForjQuery(attempts){ if (typeof window.jQuery !== "undefined") { (function($) { window.gspeechFront = function(options) { var $this = this, thisPage = this; this.initVars = function() { // get options this.options = options; this.is_touch_devise = 'ontouchstart' in window ? true : false; this.options.lazy_load_timeout = 400; }; this.init = function() { this.initVars(); this.runFunctions(); }; // Start /////////////////////////////////////////////////////////////////////// this.runFunctions = function() { this.applyCookies(); this.applyFunctions(); }; this.applyFunctions = function() { var $gsp_data_html = $("#gsp_data_html"); if (!$gsp_data_html.length) { console.log("GSpeech: required html is missing.") return; } var lazy_load = $gsp_data_html.data("lazy_load"); var reload_session = parseInt($gsp_data_html.data("reload_session")); var widget_id = $gsp_data_html.data("w_id"); var v_ind = $gsp_data_html.data("vv_index"); var gt_w = $gsp_data_html.data("gt-w"); let storage; try { storage = window.localStorage; storage.setItem('test', 'test'); storage.removeItem('test'); } catch (e) { storage = window.sessionStorage; } let encData = storage.getItem('gsp_enc_data') ? JSON.parse(storage.getItem('gsp_enc_data')) : {}; var canAjax = (typeof window.gsp_ajax_obj === 'object') && window.gsp_ajax_obj && typeof gsp_ajax_obj.ajax_url === 'string' && gsp_ajax_obj.ajax_url && typeof gsp_ajax_obj.nonce === 'string' && gsp_ajax_obj.nonce; if (reload_session == 1 || !encData.h_enc || !encData.s_enc || !encData.hh_enc) { if (canAjax) { jQuery.post(gsp_ajax_obj.ajax_url, { action: 'wpgsp_validate_enc_data', _ajax_nonce: gsp_ajax_obj.nonce }, function(response) { if (response && response.success && response.data) { encData = { s_enc: response.data.s_enc || '', h_enc: response.data.h_enc || '', hh_enc: response.data.hh_enc || '' }; try { storage.setItem('gsp_enc_data', JSON.stringify(encData)); } catch(e){} } loadCloudWidget(encData); }).fail(function() { loadCloudWidget(encData); }); } else { console.warn('[GSpeech] gsp_ajax_obj is missing — loading widget without enc data'); loadCloudWidget(encData); } } else { loadCloudWidget(encData); } function loadCloudWidget(encData) { var load_timeout = lazy_load == 1 ? thisPage.options.lazy_load_timeout : 0; if ($("#gspeech_cloud_widget").length) return; // already loaded setTimeout(function () { if ($("#gspeech_cloud_widget").length) return; // double-check $("body").append( '' ); }, load_timeout); } }; // Inner methods /////////////////////////////////////////////////////////////////////// this.bytesToHex = function(bytes) { var hexstring='', h; for(var i=0; i