$speedpage_config_code_in_head, "code_in_body" => [ [ 'attributes' => 'data-pagespeed-no-defer data-speedpage-no-delay', 'content' => '', ], [ 'attributes' => 'data-pagespeed-no-defer data-speedpage-no-delay id="speedpage_worker" type="javascript/worker"', 'content' => <<<'JS' let speedpage_font_actions="not_load",speedpage_css_length=0,speedpage_connected_css_length=0,speedpage_uncritical_fonts=null,speedpage_uncritical_fonts_status=!1;function speedpage_fetch_inbg(t,e,o=!1){for(let s in t)if(void 0!==t[s].url){var n=null;if("js"===e&&void 0!==t[s].exclude_blob&&t[s].exclude_blob){speedpage_send_worker_data(n={id:s,status:"ok",type:e,url:t[s].url,uid:t[s].uid});continue}fetch(t[s].url,{mode:"no-cors",redirect:"follow"}).then((t=>{if(!t.ok||200!==t.status)throw Error(t.statusText);return speedpage_uncritical_fonts_status&&"css"==e?t.text():t.blob()})).then((r=>{let c="";c=speedpage_uncritical_fonts_status&&"css"==e?speedpage_create_blob(r):URL.createObjectURL(r),n=null,"css"==e?n={id:s,type:e,status:"ok",media:t[s].media,url:c,uid:t[s].uid,original_url:t[s].url,speedpage_uncritical_fonts:speedpage_uncritical_fonts}:"js"==e?n={id:s,status:"ok",type:e,url:c,uid:t[s].uid}:"font"==e&&(n={status:"ok",type:e,main_url:t[s].url,url:c,font_face:t[s].font_face}),o&&(n.excluded_from_delay=!0),speedpage_send_worker_data(n)})).catch((function(n){console.log("error in fetching: "+n.toString()+", bypassing "+t[s].url),fetch(t[s].url,{redirect:"follow"}).then((t=>{if(!t.ok||200!==t.status)throw Error(t.statusText);return speedpage_uncritical_fonts_status&&"css"==e?t.text():t.blob()})).then((n=>{let r="";r=speedpage_uncritical_fonts_status&&"css"==e?speedpage_create_blob(n):URL.createObjectURL(n);var c=null;"css"==e?c={id:s,type:e,status:"ok",media:t[s].media,url:r,uid:t[s].uid,original_url:t[s].url,speedpage_uncritical_fonts:speedpage_uncritical_fonts}:"js"==e?c={id:s,status:"ok",type:e,url:r,uid:t[s].uid}:"font"==e&&(c={status:"ok",type:e,main_url:t[s].url,url:r,font_face:t[s].font_face}),o&&(c.excluded_from_delay=!0),speedpage_send_worker_data(c)})).catch((function(n){console.log("error in fetching no-cors: "+n.toString()+", bypassing "+t[s].url);try{console.log("error in fetching: "+n.toString()+", sending XMLHttpRequest"+t[s].url);let r=new XMLHttpRequest;r.responseType=speedpage_uncritical_fonts_status&&"css"==e?"text":"blob",r.onload=function(c){let a="";if(a=speedpage_uncritical_fonts_status&&"css"==e?speedpage_create_blob(c.target.response):URL.createObjectURL(c.target.response),200!==r.status)return void speedpage_XMLHttpRequest_error(o,t[s],e,s);console.log("error in fetching: "+n.toString()+", XMLHttpRequest success "+t[s].url);let l=null;"css"==e?l={id:s,type:e,status:"ok",media:t[s].media,url:a,uid:t[s].uid,speedpage_uncritical_fonts:speedpage_uncritical_fonts}:"js"==e?l={id:s,type:e,status:"ok",url:a,uid:t[s].uid}:"font"==e&&(l={type:e,status:"ok",main_url:t[s].url,url:a,font_face:t[s].font_face}),o&&(l.excluded_from_delay=!0),speedpage_send_worker_data(l)},r.onerror=function(){speedpage_XMLHttpRequest_error(o,t[s],e,s)},r.open("GET",t[s].url,!0),r.send()}catch(n){console.log("error in fetching: "+n.toString()+", running fallback for "+t[s].url);var r=null;"css"==e||"js"==e?r={id:s,type:e,status:"error",url:t[s].url,uid:t[s].uid}:"font"==e&&(r={type:e,status:"error",url:t[s].url,font_face:t[s].font_face}),o&&(r.excluded_from_delay=!0),speedpage_send_worker_data(r)}}))}))}}function speedpage_XMLHttpRequest_error(t,e,o,n){console.log("error in fetching: XMLHttpRequest failed "+e.url);var s=null;"css"==o||"js"==o?s={id:n,type:o,status:"error",url:e.url,uid:e.uid}:"font"==o&&(s={type:o,status:"error",url:e.url,font_face:e.font_face}),t&&(s.excluded_from_delay=!0),speedpage_send_worker_data(s)}function speedpage_create_blob(t){speedpage_uncritical_fonts="";t=t.replace(/@font-face\s*\{(?:[^{}])*\}/gis,(function(t){return t.includes("data:application")?t:(speedpage_uncritical_fonts+=t,"")}));let e=new Blob([t],{type:"text/css"});return URL.createObjectURL(e)}function speedpage_send_worker_data(t){"css"==t.type&&(speedpage_connected_css_length++,t.length=speedpage_css_length,t.connected_length=speedpage_connected_css_length),self.postMessage(t)}"not_load"!=speedpage_font_actions&&"exclude_uncritical_fonts"!=speedpage_font_actions||(speedpage_uncritical_fonts_status=!0),self.addEventListener("message",(function(t){speedpage_css_length=t.data.css.length,t.data.critical_data.critical_css&&t.data.critical_data.critical_fonts||(speedpage_uncritical_fonts_status=!1),t.data.font.length>0&&speedpage_fetch_inbg(t.data.font,"font"),t.data.js.length>0&&speedpage_fetch_inbg(t.data.js,"js"),t.data.excluded_js.length>0&&speedpage_fetch_inbg(t.data.excluded_js,"js",!0),t.data.css.length>0&&speedpage_fetch_inbg(t.data.css,"css")}),!1); JS ], [ 'attributes' => 'data-pagespeed-no-defer data-speedpage-no-delay type="text/javascript"', 'content' => <<<'JS' let speedpage_font_actions = "not_load"; speedpage_worker_styles_list = []; speedpage_worker_styles_count = 0; var speedpage_script_list = typeof speedpage_worker_data_js === "undefined" ? [] : speedpage_worker_data_js.js; var speedpage_excluded_js_list = typeof speedpage_worker_data_excluded_js === "undefined" ? [] : speedpage_worker_data_excluded_js.js; var excluded_count = speedpage_excluded_js_list.filter((el) => { return !!el['url'] }).length; var speedpage_css_list = typeof speedpage_worker_data_css === "undefined" ? [] : speedpage_worker_data_css.css; var speedpage_fonts_list = typeof speedpage_worker_data_font === "undefined" ? [] : speedpage_worker_data_font.font; var speedpage_critical_data = typeof speedpage_worker_data_critical_data === "undefined" ? [] : speedpage_worker_data_critical_data.critical_data; var wcode = new Blob([document.querySelector("#speedpage_worker").textContent], {type: "text/javascript"}); var speedpage_worker = new Worker(window.URL.createObjectURL(wcode)); var speedpage_worker_data = {"js": speedpage_script_list, "excluded_js": speedpage_excluded_js_list, "css": speedpage_css_list, "font": speedpage_fonts_list, critical_data: speedpage_critical_data} speedpage_worker.postMessage(speedpage_worker_data); speedpage_worker.addEventListener("message", function (e) { var data = e.data; if (data.type === "css" && data.status === "ok") { if (data.speedpage_uncritical_fonts && speedpage_font_actions == "exclude_uncritical_fonts") { let speedpage_uncritical_fonts = data.speedpage_uncritical_fonts; const speedpage_font_tag = document.createElement("style"); speedpage_font_tag.innerHTML = speedpage_uncritical_fonts; speedpage_font_tag.className = "speedpage_uncritical_fonts"; document.body.appendChild(speedpage_font_tag); } if (window.speedpage_page_loaded) { speedpage_connect_style(data); } else { speedpage_worker_styles_list.push(data); } } else if (data.type === "js") { if (data.status === "ok") { if (data.excluded_from_delay) { speedpage_excluded_js_list[data.id].old_url = speedpage_excluded_js_list[data.id].url; speedpage_excluded_js_list[data.id].url = data.url; speedpage_excluded_js_list[data.id].success = true; excluded_count--; if (excluded_count === 0) { speedpage_connect_script(0, speedpage_excluded_js_list) } } else { speedpage_script_list[data.id].old_url = speedpage_script_list[data.id].url; speedpage_script_list[data.id].url = data.url; speedpage_script_list[data.id].success = true; } } } else if (data.type === "css" && data.status === "error") { console.log("error in fetching, connecting style now") speedpage_connect_failed_style(data); } else if (data.type === "font") { speedpage_connect_font(data); } }); function UpdateQueryString(key, value, url) { if (!url) url = window.location.href; var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"), hash; if (re.test(url)) { if (typeof value !== "undefined" && value !== null) { return url.replace(re, "$1" + key + "=" + value + "$2$3"); } else { hash = url.split("#"); url = hash[0].replace(re, "$1$3").replace(/(&|\?)$/, ""); if (typeof hash[1] !== "undefined" && hash[1] !== null) { url += "#" + hash[1]; } return url; } } else { if (typeof value !== "undefined" && value !== null) { var separator = url.indexOf("?") !== -1 ? "&" : "?"; hash = url.split("#"); url = hash[0] + separator + key + "=" + value; if (typeof hash[1] !== "undefined" && hash[1] !== null) { url += "#" + hash[1]; } return url; } else { return url; } } } function speedpage_connect_failed_style(data) { var link = document.createElement("link"); link.className = "fallback_speedpage_worker"; link.rel = "stylesheet"; link.type = "text/css"; link.href = data.url; link.media = "none"; link.onload = function () { if (this.media === "none") { if (data.media) { this.media = data.media; } else { this.media = "all"; } console.log(data.media); } if (data.connected_length == data.length && typeof speedpage_replace_backgrounds != "undefined") { speedpage_replace_backgrounds(); } ;speedpage_styles_loaded() }; document.getElementsByTagName("head")[0].appendChild(link); if (data.connected_length == data.length && typeof speedpage_replace_backgrounds != "undefined") { speedpage_replace_backgrounds(); } } function speedpage_connect_style(data, fixed_google_font = false) { if (fixed_google_font === false && typeof speedpage_merge_google_fonts !== "undefined" && data['original_url'] && data['original_url'].startsWith('https://fonts.googleapis.com/css') && data['response']) { data['response'].text().then(function (content) { content = speedpage_merge_google_fonts(content) let blob = new Blob([content], {type: data['response'].type}); data['url'] = URL.createObjectURL(blob); speedpage_connect_style(data, true); }); return; } var link = document.createElement("link"); link.className = "loaded_speedpage_worker"; link.rel = "stylesheet"; link.type = "text/css"; link.href = data.url; link.media = data.media; link.onload = function () { if (data.connected_length == data.length && typeof speedpage_replace_backgrounds != "undefined") { speedpage_replace_backgrounds(); } ;speedpage_styles_loaded() }; link.onerror = function () { speedpage_styles_loaded() }; document.getElementsByTagName("head")[0].appendChild(link); } var speedpage_event; function speedpage_connect_script(i, scripts_list = null) { if (i === 0 && event) { speedpage_event = event; event.preventDefault(); } if (scripts_list === null) { scripts_list = speedpage_script_list; } if (typeof scripts_list[i] !== "undefined") { let data_uid = "[data-speedpage_delay_id=\"" + scripts_list[i].uid + "\"]"; let current_script = document.querySelector(data_uid); let script = document.createElement("script"); script.type = "text/javascript"; script.async = false; if (scripts_list[i].inline) { var js_code = decodeURIComponent(atob(scripts_list[i].code)); var blob = new Blob([js_code], {type: "text/javascript"}); scripts_list[i].url = URL.createObjectURL(blob); } if (current_script != null && typeof scripts_list[i].url != "undefined") { script.dataset.src = scripts_list[i].url; current_script.parentNode.insertBefore(script, current_script); current_script.getAttributeNames().map(function (name) { let value = current_script.getAttribute(name); try { script.setAttribute(name, value); } catch (error) { console.log(error); } }); current_script.remove(); script.classList.add("loaded_speedpage_worker_js"); if (typeof scripts_list[i].exclude_blob != "undefined" && scripts_list[i].exclude_blob) { script.dataset.blob_exclude = "1"; } } i++; speedpage_connect_script(i, scripts_list); } else { let elementor_frontend_js = null; document.querySelectorAll(".loaded_speedpage_worker_js").forEach((elem) => { let id = elem.getAttribute("id"); if (id != 'elementor-frontend-js') { speedpage_load_delayed_js(elem); } else { elementor_frontend_js = elem; } }); if (elementor_frontend_js !== null) { speedpage_load_delayed_js(elementor_frontend_js); } } } function speedpage_load_delayed_js(elem) { let data_src = elem.dataset.src; if (elem.dataset.blob_exclude === "1") { delete elem.dataset.blob_exclude; delete elem.dataset.src; delete elem.dataset.speedpage_delay_id; delete elem.dataset.speedpage_delay_src; } if (data_src) { elem.setAttribute("src", data_src); } } function speedpage_connect_font(data) { let font_face = data.font_face; if (font_face.indexOf("font-display") >= 0) { const regex = /font-display:[ ]*[a-z]*[A-Z]*;/g; while ((m = regex.exec(font_face)) !== null) { if (m.index === regex.lastIndex) { regex.lastIndex++; } m.forEach((match, groupIndex) => { console.log(match); font_face.replace(match, "font-display: swap;"); }); } } else { font_face = font_face.replace("}", ";font-display: swap;}"); } if (typeof data.main_url != "undefined") { font_face = font_face.replace(data.main_url, data.url); } var newStyle = document.createElement("style"); newStyle.className = "speedpage_critical_font"; newStyle.appendChild(document.createTextNode(font_face)); document.head.appendChild(newStyle); } let connect_stile_timeout = setInterval(function () { console.log(window.speedpage_page_loaded); if (window.speedpage_page_loaded) { clearInterval(connect_stile_timeout); speedpage_worker_styles_list.forEach(function (item, index) { speedpage_connect_style(item); }); speedpage_worker_styles_list = []; } }, 500); function speedpage_styles_loaded() { if (speedpage_css_list.length - ++speedpage_worker_styles_count == 0) { var critical_css = document.getElementById("speedpage_critical_css"); if (critical_css) { critical_css.remove(); } onStylesLoadEvent = new Event("speedpage_css_loaded"); window.dispatchEvent(onStylesLoadEvent); } } JS ], ], ];