1 2 3 4 5 6 7 8 9 10 11<!DOCTYPE html> 12<html class="no-js" dir="ltr" lang="en" prefix="og: https://ogp.me/ns# fb: https://ogp.me/ns/fb#"> 13 <head> 14 <meta charset="utf-8"> 15 <meta http-equiv="x-ua-compatible" content="ie=edge"> 16 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 17 18 19 20 21 22 23 24 25 26 <title>Contact | Education Dive</title> 27 28 29 30 31 <meta name="description" content="News, voices and jobs for education professionals. Optimized for your mobile phone."/> 32 33 34 35 36 37 38 39 40 <meta property="fb:pages" content="410714205684147"> 41 42 43 44 45
45<script> 46 window.dataLayer = window.dataLayer || []; 47 function gtag(){dataLayer.push(arguments);} 48 gtag('consent','default',{ 49 'ad_storage':'denied', 50 'analytics_storage':'denied', 51 'ad_user_data':'denied', 52 'ad_personalization':'denied', 53 'personalization_storage':'denied', 54 'functionality_storage':'granted', 55 'security_storage':'granted', 56 'wait_for_update': 500 57 }); 58 gtag("set", "ads_data_redaction", true); 59 </script>
59 60 61
61<script src="https://cmp.osano.com/AzqdtLT8Mqkut2TZ/991974d1-3bca-4b6d-93e4-fc7f0c35945c/osano.js"></script>
61 62 <style> 63 .osano-cm-widget{display: none;} 64 </style> 65
65<script> 66 // Notify GTM when analytics consent is granted 67 // This ensures page_view tag re-fires with proper attribution data (source/medium) 68 // if it's initially triggered before analytics consent has been granted 69 Osano.cm.addEventListener("osano-cm-analytics", () => { 70 gtag('event', 'analytics_consent_granted'); 71 }); 72 73 window.Osano.cm.addEventListener("osano-cm-script-blocked", function (item) { 74 console.log("Script blocked: " + item); 75 }); 76 window.Osano.cm.addEventListener("osano-cm-cookie-blocked", function (item) { 77 console.log("Cookie blocked: " + item); 78 }); 79 </script>
79 80 81 82 83 84 85 86
87<script type="module" src="/static/js/dist/darkModeFaviconToggle.bundle.js?162315011026" ></script>
87 88 89 90<!-- ====== FAVICONS ======= --> 91<link rel="icon" type="image/x-icon" sizes="any" href="/favicon.ico?v=3" /> 92<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=3"> 93<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v=3"> 94<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=3"> 95<link rel="manifest" href="/site.webmanifest?v=3"> 96<link rel="mask-icon" href="/safari-pinned-tab.svg?v=3" color="#5bbad5"> 97<meta name="msapplication-TileImage" content="/mstile-150x150.png?v=3"> 98<meta name="msapplication-TileColor" content="#603cba"> 99<meta name="theme-color" content="#ffffff"> 100 101 <link rel="alternate" type="application/rss+xml" title="Education Dive - Latest News Feed" href="https://www.educationdive.com/feeds/news/"/> 102 103 104 <meta property="og:title" content="" /> 105 <meta property="og:description" content="" /> 106 <meta property="og:image" content="https://d12v9rtnomnebu.cloudfront.net/divesite/header_image_logos/education_dive_feed_header.jpg" /> 107 108 109 110 111 112 113 114 <link rel="stylesheet" href="/static/css/dive_app.css?062315011026"> 115 116 117
118<script type="text/javascript" src="/static/js/ad_blocker_recovery.js?252015011026" defer></script>
118 119 120<!-- These are the 2 necessary scripts for the ad recovery message to work --> 121
121<script data-osano="MARKETING" async src="https://fundingchoicesmessages.google.com/i/pub-8553262192892817?ers=1" nonce="RORABhIXgMhQdZXbks8fZQ"></script>
vendor: 1 bytes, line 121
121
122<script nonce="RORABhIXgMhQdZXbks8fZQ">(function() {function signalGooglefcPresent() {if (!window.frames['googlefcPresent']) {if (document.body) {const iframe = document.createElement('iframe'); iframe.style = 'width: 0; height: 0; border: none; z-index: -1000; left: -1000px; top: -1000px;'; iframe.style.display = 'none'; iframe.name = 'googlefcPresent'; document.body.appendChild(iframe);} else {setTimeout(signalGooglefcPresent, 0);}}}signalGooglefcPresent();})();</script>
122 123 124<!-- If the ad recovery message is blocked, this script shows a backup error message asking users to allow ads -->
125<script>(function(){/* 126 127 Copyright The Closure Library Authors. 128 SPDX-License-Identifier: Apache-2.0 129 */ 130 'use strict';var aa=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}},ba="function"==typeof Object.create?Object.create:function(a){var b=function(){};b.prototype=a;return new b},k;if("function"==typeof Object.setPrototypeOf)k=Object.setPrototypeOf;else{var m;a:{var ca={a:!0},n={};try{n.__proto__=ca;m=n.a;break a}catch(a){}m=!1}k=m?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null} 131 var p=k,q=function(a,b){a.prototype=ba(b.prototype);a.prototype.constructor=a;if(p)p(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.v=b.prototype},r=this||self,da=function(){},t=function(a){return a};var u;var w=function(a,b){this.g=b===v?a:""};w.prototype.toString=function(){return this.g+""};var v={},x=function(a){if(void 0===u){var b=null;var c=r.trustedTypes;if(c&&c.createPolicy){try{b=c.createPolicy("goog#html",{createHTML:t,createScript:t,createScriptURL:t})}catch(d){r.console&&r.console.error(d.message)}u=b}else u=b}a=(b=u)?b.createScriptURL(a):a;return new w(a,v)};var A=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^Date.now()).toString(36)};var B={},C=null;var D="function"===typeof Uint8Array;function E(a,b,c){return"object"===typeof a?D&&!Array.isArray(a)&&a instanceof Uint8Array?c(a):F(a,b,c):b(a)}function F(a,b,c){if(Array.isArray(a)){for(var d=Array(a.length),e=0;e<a.length;e++){var f=a[e];null!=f&&(d[e]=E(f,b,c))}Array.isArray(a)&&a.s&&G(d);return d}d={};for(e in a)Object.prototype.hasOwnProperty.call(a,e)&&(f=a[e],null!=f&&(d[e]=E(f,b,c)));return d} 132 function ea(a){return F(a,function(b){return"number"===typeof b?isFinite(b)?b:String(b):b},function(b){var c;void 0===c&&(c=0);if(!C){C={};for(var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),e=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var h=d.concat(e[f].split(""));B[f]=h;for(var g=0;g<h.length;g++){var l=h[g];void 0===C[l]&&(C[l]=g)}}}c=B[c];d=Array(Math.floor(b.length/3));e=c[64]||"";for(f=h=0;h<b.length-2;h+=3){var y=b[h],z=b[h+1];l=b[h+2];g=c[y>>2];y=c[(y&3)<< 133 4|z>>4];z=c[(z&15)<<2|l>>6];l=c[l&63];d[f++]=""+g+y+z+l}g=0;l=e;switch(b.length-h){case 2:g=b[h+1],l=c[(g&15)<<2]||e;case 1:b=b[h],d[f]=""+c[b>>2]+c[(b&3)<<4|g>>4]+l+e}return d.join("")})}var fa={s:{value:!0,configurable:!0}},G=function(a){Array.isArray(a)&&!Object.isFrozen(a)&&Object.defineProperties(a,fa);return a};var H;var J=function(a,b,c){var d=H;H=null;a||(a=d);d=this.constructor.u;a||(a=d?[d]:[]);this.j=d?0:-1;this.h=null;this.g=a;a:{d=this.g.length;a=d-1;if(d&&(d=this.g[a],!(null===d||"object"!=typeof d||Array.isArray(d)||D&&d instanceof Uint8Array))){this.l=a-this.j;this.i=d;break a}void 0!==b&&-1<b?(this.l=Math.max(b,a+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(c)for(b=0;b<c.length;b++)a=c[b],a<this.l?(a+=this.j,(d=this.g[a])?G(d):this.g[a]=I):(d=this.l+this.j,this.g[d]||(this.i=this.g[d]={}),(d=this.i[a])? 134 G(d):this.i[a]=I)},I=Object.freeze(G([])),K=function(a,b){if(-1===b)return null;if(b<a.l){b+=a.j;var c=a.g[b];return c!==I?c:a.g[b]=G([])}if(a.i)return c=a.i[b],c!==I?c:a.i[b]=G([])},M=function(a,b){var c=L;if(-1===b)return null;a.h||(a.h={});if(!a.h[b]){var d=K(a,b);d&&(a.h[b]=new c(d))}return a.h[b]};J.prototype.toJSON=function(){var a=N(this,!1);return ea(a)}; 135 var N=function(a,b){if(a.h)for(var c in a.h)if(Object.prototype.hasOwnProperty.call(a.h,c)){var d=a.h[c];if(Array.isArray(d))for(var e=0;e<d.length;e++)d[e]&&N(d[e],b);else d&&N(d,b)}return a.g},O=function(a,b){H=b=b?JSON.parse(b):null;a=new a(b);H=null;return a};J.prototype.toString=function(){return N(this,!1).toString()};var P=function(a){J.call(this,a)};q(P,J);function ha(a){var b,c=(a.ownerDocument&&a.ownerDocument.defaultView||window).document,d=null===(b=c.querySelector)||void 0===b?void 0:b.call(c,"script[n
135once]");(b=d?d.nonce||d.getAttribute("nonce")||"":"")&&a.setAttribute("nonce",b)};var Q=function(a,b){b=String(b);"application/xhtml+xml"===a.contentType&&(b=b.toLowerCase());return a.createElement(b)},R=function(a){this.g=a||r.document||document};R.prototype.appendChild=function(a,b){a.appendChild(b)};var S=function(a,b,c,d,e,f){try{var h=a.g,g=Q(a.g,"SCRIPT");g.async=!0;g.src=b instanceof w&&b.constructor===w?b.g:"type_error:TrustedResourceUrl";ha(g);h.head.appendChild(g);g.addEventListener("load",function(){e();d&&h.head.removeChild(g)});g.addEventListener("error",function(){0<c?S(a,b,c-1,d,e,f):(d&&h.head.removeChild(g),f())})}catch(l){f()}};var ia=r.atob("aHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vaW1hZ2VzL2ljb25zL21hdGVyaWFsL3N5c3RlbS8xeC93YXJuaW5nX2FtYmVyXzI0ZHAucG5n"),ja=r.atob("WW91IGFyZSBzZWVpbmcgdGhpcyBtZXNzYWdlIGJlY2F1c2UgYWQgb3Igc2NyaXB0IGJsb2NraW5nIHNvZnR3YXJlIGlzIGludGVyZmVyaW5nIHdpdGggdGhpcyBwYWdlLg=="),ka=r.atob("RGlzYWJsZSBhbnkgYWQgb3Igc2NyaXB0IGJsb2NraW5nIHNvZnR3YXJlLCB0aGVuIHJlbG9hZCB0aGlzIHBhZ2Uu"),la=function(a,b,c){this.h=a;this.j=new R(this.h);this.g=null;this.i=[];this.l=!1;this.o=b;this.m=c},V=function(a){if(a.h.body&&!a.l){var b= 136 function(){T(a);r.setTimeout(function(){return U(a,3)},50)};S(a.j,a.o,2,!0,function(){r[a.m]||b()},b);a.l=!0}},T=function(a){for(var b=W(1,5),c=0;c<b;c++){var d=X(a);a.h.body.appendChild(d);a.i.push(d)}b=X(a);b.style.bottom="0";b.style.left="0";b.style.position="fixed";b.style.width=W(100,110).toString()+"%";b.style.zIndex=W(2147483544,2147483644).toString();b.style["background-color"]=ma(249,259,242,252,219,229);b.style["box-shadow"]="0 0 12px #888";b.style.color=ma(0,10,0,10,0,10);b.style.display= 137 "flex";b.style["justify-content"]="center";b.style["font-family"]="Roboto, Arial";c=X(a);c.style.width=W(80,85).toString()+"%";c.style.maxWidth=W(750,775).toString()+"px";c.style.margin="24px";c.style.display="flex";c.style["align-items"]="flex-start";c.style["justify-content"]="center";d=Q(a.j.g,"IMG");d.className=A();d.src=ia;d.style.height="24px";d.style.width="24px";d.style["padding-right"]="16px";var e=X(a),f=X(a);f.style["font-weight"]="bold";f.textContent=ja;var h=X(a);h.textContent=ka;Y(a, 138 e,f);Y(a,e,h);Y(a,c,d);Y(a,c,e);Y(a,b,c);a.g=b;a.h.body.appendChild(a.g);b=W(1,5);for(c=0;c<b;c++)d=X(a),a.h.body.appendChild(d),a.i.push(d)},Y=function(a,b,c){for(var d=W(1,5),e=0;e<d;e++){var f=X(a);b.appendChild(f)}b.appendChild(c);c=W(1,5);for(d=0;d<c;d++)e=X(a),b.appendChild(e)},W=function(a,b){return Math.floor(a+Math.random()*(b-a))},ma=function(a,b,c,d,e,f){return"rgb("+W(Math.max(a,0),Math.min(b,255)).toString()+","+W(Math.max(c,0),Math.min(d,255)).toString()+","+W(Math.max(e,0),Math.min(f, 139 255)).toString()+")"},X=function(a){a=Q(a.j.g,"DIV");a.className=A();return a},U=function(a,b){0>=b||null!=a.g&&0!=a.g.offsetHeight&&0!=a.g.offsetWidth||(na(a),T(a),r.setTimeout(function(){return U(a,b-1)},50))},na=function(a){var b=a.i;var c="undefined"!=typeof Symbol&&Symbol.iterator&&b[Symbol.iterator];b=c?c.call(b):{next:aa(b)};for(c=b.next();!c.done;c=b.next())(c=c.value)&&c.parentNode&&c.parentNode.removeChild(c);a.i=[];(b=a.g)&&b.parentNode&&b.parentNode.removeChild(b);a.g=null};var pa=function(a,b,c,d,e){var f=oa(c),h=function(l){l.appendChild(f);r.setTimeout(function(){f?(0!==f.offsetHeight&&0!==f.offsetWidth?b():a(),f.parentNode&&f.parentNode.removeChild(f)):a()},d)},g=function(l){document.body?h(document.body):0<l?r.setTimeout(function(){g(l-1)},e):b()};g(3)},oa=function(a){var b=document.createElement("div");b.className=a;b.style.width="1px";b.style.height="1px";b.style.position="absolute";b.style.left="-10000px";b.style.top="-10000px";b.style.zIndex="-10000";return b};var L=function(a){J.call(this,a)};q(L,J);var qa=function(a){J.call(this,a)};q(qa,J);var ra=function(a,b){this.l=a;this.m=new R(a.document);this.g=b;this.i=K(this.g,1);b=M(this.g,2);this.o=x(K(b,4)||"");this.h=!1;b=M(this.g,13);b=x(K(b,4)||"");this.j=new la(a.document,b,K(this.g,12))};ra.prototype.start=function(){sa(this)}; 140 var sa=function(a){ta(a);S(a.m,a.o,3,!1,function(){a:{var b=a.i;var c=r.btoa(b);if(c=r[c]){try{var d=O(P,r.atob(c))}catch(e){b=!1;break a}b=b===K(d,1)}else b=!1}b?Z(a,K(a.g,14)):(Z(a,K(a.g,8)),V(a.j))},function(){pa(function(){Z(a,K(a.g,7));V(a.j)},function(){return Z(a,K(a.g,6))},K(a.g,9),K(a.g,10),K(a.g,11))})},Z=function(a,b){a.h||(a.h=!0,a=new a.l.XMLHttpRequest,a.open("GET",b,!0),a.send())},ta=function(a){var b=r.btoa(a.i);a.l[b]&&Z(a,K(a.g,5))};(function(a,b){r[a]=function(c){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];r[a]=da;b.apply(null,d)}})("__h82AlnkH6D91__",function(a){"function"===typeof window.atob&&(new ra(window,O(qa,window.atob(a)))).start()});}).call(this); 141 142 window.__h82AlnkH6D91__("WyJwdWItODU1MzI2MjE5Mjg5MjgxNyIsW251bGwsbnVsbCxudWxsLCJodHRwczovL2Z1bmRpbmdjaG9pY2VzbWVzc2FnZXMuZ29vZ2xlLmNvbS9iL3B1Yi04NTUzMjYyMTkyODkyODE3Il0sbnVsbCxudWxsLCJodHRwczovL2Z1bmRpbmdjaG9pY2VzbWVzc2FnZXMuZ29vZ2xlLmNvbS9lbC9BR1NLV3hVc0lBMXlKVmRQQWNGaXJQX1lGUTdENkpIZVNZUGV6bWNOM216TmJmYWhldlNobXpBVHkzVzlPLU5LV3MyNkx5cWVXRUx3YnRhZzN1MnZEWHVkZnFFSkVRXHUwMDNkXHUwMDNkP3RlXHUwMDNkVE9LRU5fRVhQT1NFRCIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFVoRGZtbFAtR2RTZUhBa1lVY2VmWTFQYXh1cDNFdmhndlJDNVM4bms3S2t1TElaUXBFQ05VZTIySUNjcGx4eF9oeVlveHJTdy1iU3FjUkhKZWwyWU1NalFcdTAwM2RcdTAwM2Q/YWJcdTAwM2QxXHUwMDI2c2JmXHUwMDNkMSIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFgzMm02dWJvVVVwaXJ1b1VQMmhkY2R1S2U5S0pzaDlGRDloMDlWOTlYTkpyZkVTRW5HNzh4Vm0yUDZXdjBDNmkwMXZ4Ui11V25ZVVdlWEI3dmNCd1c5cFFcdTAwM2RcdTAwM2Q/YWJcdTAwM2QyXHUwMDI2c2JmXHUwMDNkMSIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFh0cXRhOEVpaV9LUVI4VHNLaDFVUGJ5TFlnNU1ocDFqdVNFemltQVFFeDFjRDJxalJhTjNDM21hSkt1VkVqdGZ5bTZjSXg5emVaLU5IazZMbTE5QjB1ZGdcdTAwM2RcdTAwM2Q/c2JmXHUwMDNkMiIsImRpdi1ncHQtYWQiLDIwLDEwMCwiY0hWaUxUZzFOVE15TmpJeE9USTRPVEk0TVRjXHUwMDNkIixbbnVsbCxudWxsLG51bGwsImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tLzBlbW4vZi9wL3B1Yi04NTUzMjYyMTkyODkyODE3LmpzP3VzcXBcdTAwM2RDQUUiXSwiaHR0cHM6Ly9mdW5kaW5nY2hvaWNlc21lc3NhZ2VzLmdvb2dsZS5jb20vZWwvQUdTS1d4V0QtdnVGQVVZRE9STnItSmY2SnJGSGhYYU1QNlo5NG1CTjFyQ2g5M1FvdVNLSmtJcFBlLW1Uc2NpdHNWOEZ0aUdIdzBFZ1QtOEMzbHpFblJMczduZ0pQQVx1MDAzZFx1MDAzZCJd"); 143</script>
143 144 145 146
147<script src="/static/js/jquery_360.min.js?252015011026"></script>
147 148 149 150
151<script> 152 153 // waitForTriggerHandler() is library for queuing up javascript to be stored and then executed when a trigger 154 // function is called. You can push() any number of functions which will be stored unless and until trigger() 155 // is called. Once trigger() is called any future functions that you push() in will be executed immediately. 156 // It is safe to call .trigger() multiple times. Any arguments passed to .trigger() will also be passed along 157 // to the associated function 158 159 function waitForTriggerHandler() { 160 var function_queue = []; 161 var trigger_arguments = []; 162 this._triggered = false; 163 164 this.push = function(fn) { 165 if (this._triggered) { 166 // just run it immediately if handler has already been triggered 167 fn.apply(null, trigger_arguments); 168 } 169 else { 170 // otherwise add to the queue to run later 171 function_queue.push(fn); 172 } 173 }; 174 175 this.trigger = function() { 176 // any arguments passed to trigger(foo, bar, baz) will also be passed along to functions in the queue 177 178 // first convert any arguments to an array 179 trigger_arguments = Array.prototype.slice.call(arguments); 180 while (function_queue.length){ 181 // for each function in the queue, pop it off and then execute it while passing in any 182 // args that may have been passed to trigger(). 183 function_queue.pop().apply(null, trigger_arguments); 184 // The "null" above is for the value of "this". 185 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply#Parameters 186 } 187 this._triggered = true; 188 } 189 190 } 191 192 // set up waitToLoadAds handler 193 window.waitToLoadAds = new waitForTriggerHandler(); 194 // We set up the triggers for this below, they depend on whether we're loading lytics on the page 195</script>
195 196 197 198 199
199<script type="text/javascript"> 200 201 window.googletag = window.googletag || {}; 202 googletag.cmd = googletag.cmd || []; 203 204 // initialize callback (source: https://learn.lytics.com/product-docs/lytics-javascript-tag/receiving-data-from-lytics) 205 !function(){"use strict";var o=window.jstag||(window.jstag={}),r=[];function n(e){o[e]=function(){for(var n=arguments.length,t=new Array(n),i=0;i<n;i++)t[i]=arguments[i];r.push([e,t])}}n("send"),n("mock"),n("identify"),n("pageView"),n("unblock"),n("getid"),n("setid"),n("loadEntity"),n("getEntity"),n("on"),n("once"),n("call"),o.loadScript=function(n,t,i){var e=document.createElement("script");e.async=!0,e.src=n,e.onload=t,e.onerror=i;var o=document.getElementsByTagName("script")[0],r=o&&o.parentNode||document.head||document.body,c=o||r.lastChild;return null!=c?r.insertBefore(e,c):r.appendChild(e),this},o.init=function n(t){return this.config=t,this.loadScript(t.src,function(){if(o.init===n)throw new Error("Load error!");o.init(o.config),function(){for(var n=0;n<r.length;n++){var t=r[n][0],i=r[n][1];o[t].apply(o,i)}r=void 0}()}),this}}(); 206 207 208 // custom init + lytics default install tag from https://activate.getlytics.com/connect?aid=2751 209 // see https://learn.lytics.com/understanding/product-docs/lytics-javascript-tag/configuration#configuration-options 210 211 var lyticsCid = '44fda7674f94228540d8fba6786f9770'; 212 console.log('You are using the Lytics Prod account'); 213 214 215 216 217 jstag.init({ 218 src: `https://c.lytics.io/api/tag/${lyticsCid}/latest.min.js`, 219 pageAnalysis: { 220 dataLayerPull: { 221 disabled: true 222 } 223 } 224 }); 225 jstag.pageView(); 226 227 228 (function(){ 229 var sailthru_cookie, sailthru_user_id; 230 function read_cookie(cookieName) { 231 var re = new RegExp('[; ]'+cookieName+'=([^\\s;]*)'); 232 var sMatch = (' '+document.cookie).match(re); 233 if (cookieName && sMatch) return unescape(sMatch[1]); 234 return ''; 235 } 236 sailthru_cookie = read_cookie('sailthru_hid'); 237 if (sailthru_cookie.length > 56) { 238 sailthru_user_id = sailthru_cookie.slice(32,56); 239 jstag.send({ st_profile_id: sailthru_user_id }); 240 } 241 })(); 242 243 244 245 246 247 jstag.call('entityReady', () => waitToLoadAds.trigger()); 248 setTimeout(() => waitToLoadAds.trigger(), 1000); // also trigger lytics if it's taking too long 249 250 251 252 waitToLoadAds.push(function (lytics_data) { 253 // lytics_data won't be defined if lytics failed to load correctly. In that case 254 // we don't need to set any segments. 255 if (lytics_data && lytics_data.segments) { 256 googletag.cmd.push(function() { 257 googletag.pubads().setTargeting("LyticsSegments", lytics_data.segments); 258 }); 259 } 260 }); 261 262 function getUID(id) { 263 window.dataLayer.push({'user_id': id}); 264 }; 265 jstag.getid(getUID); 266 267 268 </script>
268 269 270 271 272 273
273<script src="/jsi18n/"></script>
273 274 275 276 277 278 279 280
281<script> 282 // Initialize dataLayer empty array for GTM events 283 window.dataLayer = window.dataLayer || []; 284 window.dataLayer.push({ 285 'site': 'Education Dive', 286 }); 287 // wrapper function to push GTM events to dataLayer 288 pushGTMEvent = (eventObject) => { 289 // if window.datalayer is not defined, then set to an empty array 290 window.dataLayer.push(eventObject); 291 }; 292</script>
292 293<!-- Google Tag Manager -->
294<script>
vendor: 327 bytes, lines 294-298
294(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 295new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 296j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 297'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 298})(window,document,'script','dataLayer','
298GTM-N39SJ4T
vendor: 3 bytes, line 298
298');
298</script>
298 299<!-- End Google Tag Manager --> 300
301<script> 302 let eventParams = {}; 303 304 305 const gtmEventObject = { 306 event: 'page.content', 307 'page.content': { 308 v:11, // seer version 309 ...eventParams 310 } 311 }; 312 window.pushGTMEvent(gtmEventObject); 313 window.lyticsLookup = {"any_agriculture_dive_subs": "aa", "any_automotive_dive_subs": "ab", "any_banking_dive_subs": "ac", "any_biopharma_dive_subs": "ad", "any_cstore_dive_subs": "ae", "any_cfo_dive_subs": "af", "cfo_dive_tech_valid_subs": "ag", "any_cfo_balance_subs": "ah", "any_cio_dive_subs": "ai", "any_construction_dive_subs": "aj", "any_cybersecurity_dive_subs": "ak", "any_higher_ed_dive_subs": "al", "any_k12_dive_subs": "am", "any_facilities_dive_subs": "an", "any_fashion_dive_subs": "ao", "any_food_dive_subs": "ap", "any_grocery_dive_subs": "aq", "any_healthcare_dive_subs": "ar", "any_hotel_dive_subs": "as", "any_hr_dive_subs": "at", "any_legal_dive_subs": "au", "any_manufacturing_dive_subs": "av", "any_marketing_dive_subs": "aw", "any_medtech_dive_subs": "ax", "any_mobile_marketer_subs": "ay", "any_multifamily_dive_subs": "az", "any_packaging_dive_subs": "a0", "any_payments_dive_subs": "a1", "any_pharmavoice_subs": "a2", "any_restaurant_dive_subs": "a3", "any_retail_dive_subs": "a4", "any_smart_cities_dive_subs": "a5", "any_social_media_today_subs": "a6", "any_supplychain_dive_subs": "a7", "any_transport_dive_subs": "a8", "any_utility_dive_subs": "a9", "any_waste_dive_subs": "ba", "lt_15_million_company_revenue": "bb", "lt_20_million_company_revenue": "bc", "gt_100m_company_revenue": "bd", "gt_500m_company_revenue": "be", "250k_to_at_least_5m_company_revenue": "bf", "5m_to_20m_company_revenue": "bg", "20m_5000m_company_revenue": "bh", "all_cfos": "bi", "retail_holiday_edition_valid_subscribers": "bj", "banking_dive_valid_subscribers": "bk", "biopharma_dive_valid_subscribers": "bl", "cfo_dive_valid_subscribers": "bm", "cio_dive_valid_subscribers": "bn", "construction_dive_valid_subscribers": "bo", "education_dive_higher_ed_valid_subscribers": "bp", "education_dive_k12_valid_subscribers": "bq", "food_dive_valid_subscribers": "br", "grocery_dive_valid_subscribers": "bs", "healthcare_dive_valid_subscribers": "bt", "hr_dive_valid_subscribers": "bu", "hr_dive_talent_valid_subscribers": "bv", "marketing_dive_valid_subscribers": "bw", "medtech_dive_valid_subscribers": "bx", "mobile_marketer_valid_subscribers": "by", "restaurant_dive_valid_subscribers": "bz", "retail_dive_valid_subscribers": "b0", "retail_dive_dtc_valid_subscribers": "b1", "smart_cities_dive_valid_subscribers": "b2", "social_media_today_valid_subscribers": "b3", "supply_chain_dive_valid_subscribers": "b4", "transport_dive_valid_subscribers": "b5", "utility_dive_valid_subscribers": "b6", "waste_dive_valid_subscribers": "b7", "all_target_readers": "b8", "automotive_dive_high_quality_target_readers": "b9", "banking_dive_high_quality_target_readers": "ca", "biopharma_dive_target_readers": "cb", "cstore_dive_high_quality_target_readers": "cc", "cfo_dive_high_quality_target_readers_": "cd", "cio_dive_high_quality_target_readers": "ce", "construction_dive_high_quality_target_readers": "cf", "cybersecurity_dive_high_quality_target_readers": "cg", "facilities_dive_high_quality_target_readers": "ch", "fashion_dive_high_quality_target_readers": "ci", "food_dive_high_quality_target_readers": "cj", "grocery_dive_high_quality_target_readers": "ck", "healthcare_dive_target_readers": "cl", "higher_ed_high_quality_target_readers": "cm", "hotel_dive_high_quality_target_readers": "cn", "hr_dive_high_quality_target_readers": "co", "hr_dive_learning_high_quality_target_readers": "cp", "hr_dive_talent_high_quality_target_readers": "cq", "k12_high_quality_target_readers": "cr", "legal_dive_high_quality_target_readers": "cs", "manufacturing_dive_high_quality_target_readers": "ct", "marekting_dive_high_quality_target_readers": "cu", "medtech_high_quality_target_readers": "cv", "mobile_marketer_high_quality_target_readers": "cw", "multifamily_dive_high_quality_target_readers": "cx", "packaging_dive_high_quality_target_readers": "cy", "payments_dive_high_quality_target_readers": "cz", "pharmavoice_high_quality_target_readers": "c0", "restaurant_dive_high_quality_target_readers": "c1", "retail_dive_high_quality_target_readers": "c2", "smart_cities_dive_high_quality_target_readers": "c3", "socialmediatoday_target_readers": "c4", "supply_chain_dive_high_quality_target_readers": "c5", "transport_dive_high_quality_target_readers": "c6", "utility_dive_high_quality_target_readers": "c7", "waste_dive_high_quality_target_readers": "c8", "banking_dive_fintech_valid_subscribers": "c9", "biopharma_dive_emerging_biotech_valid_subscribers": "da", "biopharma_dive_manufacturing_valid_subscribers": "db", "biopharma_dive_marketing_valid_subscribers": "dc", "construction_dive_tech_valid_subscribers": "dd", "education_dive_k12_curriculum_valid_subscribers": "de", "food_dive_ingredients_valid_subscribers": "df", "healthcare_dive_it_valid_subscribers": "dg", "healthcare_dive_payer_valid_subscribers": "dh", "hr_dive_compensation_benefits_valid_subscribers": "di", "hr_dive_compliance_valid_subscribers": "dj", "hr_dive_diversity_inclusion_valid_subscribers": "dk", "hr_dive_learning_valid_subscribers": "dl", "hr_dive_recruiting_valid_subscribers": "dm", "marketing_dive_agencies_valid_subscribers": "dn", "marketing_dive_mobile_val
313id_subscribers": "do", "retail_dive_marketing_valid_subscribers": "dp", "retail_dive_mobile_commerce_valid_subscribers": "dq", "retail_dive_operations_valid_subscribers": "dr", "retail_dive_tech_valid_subscribers": "ds", "supply_chain_dive_operations_valid_subscribers": "dt", "supply_chain_dive_procurement_valid_subscribers": "du", "utility_dive_demand_response_valid_subscribers": "dv", "utility_dive_solar_valid_subscribers": "dw", "utility_dive_storage_valid_subscribers": "dx", "waste_dive_recycling_valid_subscribers": "dy", "all_cio_job_level": "dz", "all_cso_ciso_job_level": "d0", "all_cto_job_level": "d1", "all_users_on_a_primary_list_in_sailthru": "d2", "any_administration_job_function": "d3", "any_analyst_job_level": "d4", "any_associate_job_level": "d5", "any_bank_finance_company_type": "d6", "any_biz_dev_sales_job_function": "d7", "any_clevel_job_level": "d8", "any_construction_company_type": "d9", "any_customer_relations_job_function": "ea", "any_cx_job_function": "eb", "any_director_vp_job_level": "ec", "any_education_company_type": "ed", "any_finance_job_function": "ee", "any_food_and_bev_company_type": "ef", "any_food_service_company_type": "eg", "any_hr_job_function": "eh", "any_manager_job_level": "ei", "any_manufacturing_company_type": "ej", "any_marketing_job_function": "ek", "any_media_company_type": "el", "any_operations_analysis_job_function": "em", "any_operations_job_function": "en", "any_product_job_function": "eo", "any_retail_company_type": "ep", "any_supply_chain_job_function": "eq", "any_tech_company_type": "er", "any_telecom_company_type": "es", "any_transportation_company_type": "et", "any_transportation_job_function": "eu", "any_utility_company_type": "ev", "any_ux_job_function": "ew", "any_waste_recycling_company_type": "ex", "company_size_1_249": "ey", "company_size_1000_4999": "ez", "company_size_1000_plus": "e0", "company_size_250_499": "e1", "company_size_5000_9999": "e2", "seh_k12_at_risk_users_in_2023_churn_campaign": "e3", "seh_k12_at_risk_users_who_clicked_2023_churn_campagin": "e4", "square_food_bev_audience": "e5", "square_restaurant_audience": "e6", "square_retail_audience": "e7", "any_cx_dive_subs": "e8", "any_esg_dive_subs": "e9", "cfo_balance_high_quality_target_readers": "fa", "cx_dive_high_quality_target_readers": "fb", "esg_dive_high_quality_target_readers": "fc", "informauploadsnov2022": "fd", "ladders_uploads_2021": "fe", "ladders_utm_campaign_tracking": "ff", "agriculture_dive_high_quality_target_readers": "fg", "all_marketing_related_audience": "fh", "tech_job_function": "fi", "construction_dive_infrastru
313cture_valid_subscribers": "fj", "construction_dive_labor_safety_valid_subscribers": "fk", "supply_chain_dive_logistics_valid_subscribers": "fl", "payers_on_healthcare": "fm", "providers_on_healthcare": "fn", "wardsauto_valid_subscribers": "fo", "wardsauto_dealer_valid_subscribers": "fp", "any_wardsauto_subs": "fq", "wardsauto_high_quality_target_readers": "fr", "wardsauto_high_quality_target_readers_automakers": "fs", "wardsauto_high_quality_target_readers_dealers": "ft", "wardsauto_high_quality_target_readers_suppliers": "fu", "channel_dive_valid_subscribers": "fv", "any_channel_dive_subs": "fw", "channel_dive_high_quality_target_readers": "fx", "cstore_retail_subs": "fy", "cstore_grocery_subs": "fz", "healthcare_dive_high_quality_target_readers_providers": "f0", "healthcare_dive_high_quality_target_readers_payers": "f1", "healthcare_dive_high_quality_target_readers_health_it": "f2", "2026_outlooks_autorecommended_content_audience": "f3"} 314</script>
314 315 316 317
318<script type="module" src="/static/js/dist/lyticsHelper.bundle.js?162315011026" ></script>
318 319 320 321 322 323 <!-- HTMX for dynamic content loading --> 324 325
326<script src="/static/js/htmx_204.min.js?252015011026"></script>
326 327 328 329 330 331 332 333 334 335
336<script type="text/javascript" src="/static/js/mailcheck.min.js?252015011026" defer></script>
vendor: 1 bytes, line 336
336
337<script type="text/javascript" src="/static/js/dive_mailcheck.js?252015011026" defer></script>
337 338 339 340 341 342
342<script src="/static/js/app.js?252015011026" defer></script>
342 343 344 345
345<script type="text/javascript"> 346 var divecounter_settings = {}; 347 348 349 350 351 </script>
351 352 353
353<script type="text/javascript" src="/static/js/divecounter.js?252015011026"></script>
353 354 355 356 357 358
359<script type="text/javascript"> 360 function read_cookie(cookieName) { 361 var re = new RegExp('[; ]'+cookieName+'=([^\\s;]*)'); 362 var sMatch = (' '+document.cookie).match(re); 363 if (cookieName && sMatch) return unescape(sMatch[1]); 364 return ''; 365 } 366 367 var script = document.createElement('script'); 368 script.type = 'text/javascript'; 369 script.async = true; 370 script.addEventListener('load', function(e) { 371 // we only pass the template this context variable on newsposts 372 let informaData = false; 373 374 if (window.IIRISTracker) { 375 var sailthru_id = read_cookie('sailthru_hid'); 376 if (sailthru_id.length > 56) { 377 sailthru_id = sailthru_id.slice(32,56); 378 } 379 380 var notProduction = 'False' === 'True'; 381 var domain = 'www.educationdive.com'.split('.')[1]; 382 // on non-prod environment, there is specific collector domain to send the data to. 383 var cDomain = notProduction ? 'com-informa-prod1.mini.snplow.net' : 'c.' + domain + '.com' // removed .com previous line 384 var cfg = { 385 config: { 386 td: {}, 387 snowplow: { 388 context: {} 389 } 390 } 391 }; 392 cfg.config.idsource = 'sailthruid'; 393 cfg.config.snowplow.appId = domain; 394 cfg.config.snowplow.cDomain = cDomain; 395 cfg.config.td.lob = 'it'; 396 cfg.config.td.domain = domain; 397 cfg.config.snowplow.contentTagEnabled = !!informaData 398 cfg.config.snowplow.context = informaData 399 window.IIRISTracker.initConfig(cfg); 400 window.IIRISTracker.setTrackingUID(sailthru_id); 401 var irisEvt = new Event('trackerLoaded'); 402 window.dispatchEvent(irisEvt); 403 } else { 404 window.addEventListener('trackerLoaded', function(evt) { 405 if(window.IIRISTracker) { 406 window.IIRISTracker.setTrackingUID(sailthru_id); 407 } 408 }); 409 } 410 }); 411 script.src = 'https://static.iris.informa.com/widgets/v3.0/iris-t.js'; 412 document.getElementsByTagName('head')[0].appendChild(script); 413</script>
413 414 415 416 417 418 419 420 421 422 423
423<script type="text/javascript"> 424 jQuery.browser = {}; 425 (function () { 426 jQuery.browser.msie = false; 427 jQuery.browser.version = 0; 428 if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) { 429 jQuery.browser.msie = true; 430 jQuery.browser.version = RegExp.$1; 431 } 432 })(); 433 </script>
433 434 <!-- for modal signup form --> 435 436
436<script type="text/javascript" src="/static/js/jquery.simplemodal.divefork.min.js?252015011026" defer></script>
436 437 438 439 440 <style> 441 442 /* dynamic style overrides based on DB go here*/ 443 444 </style> 445 446 447 448 449
450<script type="module" src="/static/js/dist/signupReferrer.bundle.js?162315011026" ></script>
450 451 452 453 454 455
456<script type="module" src="/static/js/dist/searchTracking.bundle.js?162315011026" ></script>
456 457 458 459
460<script type="module" src="/static/js/dist/navRelatedQuestionsTracking.bundle.js?162315011026" ></script>
460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476
476<script type="text/javascript" src="/static/js/prestitial.js?252015011026"></script>
476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492
493<script type="text/javascript" src="/static/js/dist/adTemplates.bundle.js?162315011026" defer></script>
vendor: 1 bytes, line 493
493
494<script> 495 const desktopWidth = 1024; 496 497 window.dfp_visibility = window.innerWidth >= desktopWidth ? 'desktop' : 'mobile'; 498 499 const dfpDisplayConfiguration = { 500 "prestitialEnabled": true, 501 "leaderboardEnabled": true, 502 "sidebarAdsEnabled": true, 503 "visibility": window.dfp_visibility 504 }; 505 506 507 var googletag = googletag || {}; 508 googletag.cmd = googletag.cmd || []; 509 googletag.cmd.push(function () { 510 511 512 513 514 515 516 517 if ((typeof divecounter !== "undefined") && (divecounter.getMarketingData().is_subscriber)) { 518 googletag.pubads().setTargeting("is_subscriber", "yes"); 519 } 520 521 const site = window.location.host 522 googletag.pubads().setTargeting("site", site); 523 524 const first_path = window.location.pathname.split( '/' )[1]; 525 googletag.pubads().setTargeting("first_path", first_path); 526 527 528 529 530 // Set ad targeting on the trendline to show the ads designated for it 531 532 533 const isTopicPage = window.location.pathname.indexOf('/topic/') !== -1; 534 if(isTopicPage) { 535 googletag.pubads().setTargeting('is_topics_page', 'true'); 536 } 537 538 539 const cookies = document.cookie.split("; "); 540 const utmMedium = cookies.find(cookie => cookie.startsWith("utmMedium=")); 541 const utmMediumValue = utmMedium ? utmMedium.split("=")[1] : null; 542 const ppc = utmMediumValue && utmMediumValue.toUpperCase() === "CPC" ? "1" : "0"; 543 googletag.pubads().setTargeting("ppc", ppc); 544 545 }); 546 547 googletag.cmd.push(function () { 548 googletag.pubads().setCentering(true); 549 googletag.pubads().collapseEmptyDivs(false); // Whether to collapse the slots even before the ads are fetched. 550 googletag.setConfig({ singleRequest: true }); 551 window.onDvtagReady?.(); // Notify DoubleVerify page tag that slots are defined. 552 googletag.enableServices(); 553 }); 554</script>
554 555 556 557 558
559<script>window.fallbackAds = '[]'</script>
559 560 561
562<script type="module" src="/static/js/dist/onBoardDiagnostics.bundle.js?162315011026" ></script>
562 563 564 565 566 567 568 569 570 571 572 <!-- NEW RELIC SYNTHETICS CANARY --> 573 </head> 574 575 576 <body class="contact contact-form"> 577 <!-- Accessibility skip-nav link --> 578 <a href="#skip-link-target" class="button button--loud skip-nav-link" tabindex="1">Skip to main content</a> 579 580 581 <!-- Google Tag Manager (noscript) --> 582 <noscript><iframe data-osano="ESSENTIAL" src="https://www.googletagmanager.com/ns.html?id=GTM-N39SJ4T" height="0" width="0" style="display:none;visibility:hidden"> 583 </iframe></noscript> 584 <!-- End Google Tag Manager (noscript) --> 585 586 587 588 589 590 591 592 593 <div id="prestitial-init" style="display: none;" class="prestitial-init"></div> 594 <div id="prestitial-oop" style="display: none;"></div> 595 <div id="prestitial-outer" style="display: none;" class="prestitial content-overlay"> 596 <section class="site-menu" aria-label="Site menu"> 597 <div class="site-menu-inner"> 598 599 <img src="https://d12v9rtnomnebu.cloudfront.net/logo/publications/education_black.svg" alt="Education Dive" class="pub-logo"> 600 601 </div> 602 </section> 603 <section class="paychek-page-wrapper row"> 604 <div class="paychek-button large-4 large-push-8 columns"> 605 <div> 606 CONTINUE TO SITE â 607 </div> 608 </div> 609 <div class="paychek large-8 large-pull-4 columns"> 610 611 <div id="paychekgoeshere"></div> 612
612<script type="text/javascript"> 613 if (typeof prestitialAds !== 'undefined' && prestitialAds.pageIsPrestitialEligible()) { 614 615 prestitialAds.showOverlay(); 616 617 } 618 </script>
618 619
619<script type="text/javascript"> 620 621 if (typeof prestitialAds !== 'undefined' && prestitialAds.pageIsPrestitialEligible()) { 622 // Initialize but don't show yet - wait to see if OOP loads 623 prestitialAds.initialize(3); 624 625 prestitialAds.setPrestitialPossibleCookie(); 626 const prestitial_ad_unit_path = '/3618/educationdive/educationdiveprestitial'; 627 628 629 let oopStatus = 'pending'; 630 let standardStatus = 'pending'; 631 let resolved = false; 632 633 function resolvePrestitial() { 634 if (resolved) return; 635 636 if (oopStatus === 'loaded') { 637 resolved = true; 638 prestitialAds.showOOPPrestitial(); 639 // Wait for OOP ad content to exist before hiding overlay 640 prestitialAds.waitForOOPAdContent(function() { 641 $('div#prestitial-init').hide(); // hide the all white overlay 642 // Wait for Airtory to close (either by user or timeout) 643 // before closing OOP wrapper and restoring the page scroll. 644 prestitialAds.watchForOOPAdClose(function() { 645 prestitialAds.closePrestitial(); 646 }); 647 }); 648 } else if (oopStatus === 'empty' && standardStatus === 'loaded') { 649 resolved = true; 650 prestitialAds.showStandardPrestitial(); 651 $.modal.close(); 652 $('div#prestitial-init').hide(); // hide the all white overlay 653 } else if (oopStatus === 'empty' && standardStatus === 'empty') { 654 resolved = true; 655 prestitialAds.closePrestitial(); 656 } 657 // else: one or both slots are still pending, wait for the other to report. 658 } 659 660 googletag.cmd.push(function () { 661 googletag.pubads().addEventListener('slotRenderEnded', function (event) { 662 663 if (event.slot.getAdUnitPath() == prestitial_ad_unit_path) { 664 const slotElementId = event.slot.getSlotElementId(); 665 666 if (slotElementId === 'prestitial-oop') { 667 oopStatus = event.isEmpty ? 'empty' : 'loaded'; 668 resolvePrestitial(); 669 } else if (slotElementId === 'paychekgoeshere') { 670 standardStatus = (event.isEmpty || prestitialAds.testingNoAd()) ? 'empty' : 'loaded'; 671 resolvePrestitial(); 672 } 673 } 674 }); 675 676 // Set the _prestitialViewed cookie after there has been a prestitial impression 677 googletag.pubads().addEventListener('impressionViewable', function (event) { 678 if (event.slot.getAdUnitPath() == prestitial_ad_unit_path) { 679 prestitialAds.setCookie( 680 "_prestitialViewed", 681 (new Date()).getTime(), 682 prestitialAds.daysBetweenPrestitial 683 ); 684 } 685 }); 686 }); 687 688 689 if (prestitialAds.testingNoAd()) { 690 691 } else { 692 693 694 if (prestitialAds.screenMeetsSizeReqs()) { 695 googletag.cmd.push(function() { 696 googletag.defineSlot( 697 prestitial_ad_unit_path, 698 [[500, 300], [640, 480]], 699 'paychekgoeshere' 700 ).addService(googletag.pubads()); 701 702 googletag.defineOutOfPageSlot( 703 prestitial_ad_unit_path, 704 'prestitial-oop' 705 ).addService(googletag.pubads()); 706 }); 707 } 708 709 waitToLoadAds.push(function() { 710 711 googletag.cmd.push(function () { 712 713 // Both slots must be displayed (requested) so GAM has a chance to 714 // fill either one; resolvePrestitial() needs both slotRenderEnded 715 // events to decide which ad (if any) to actually show. 716 window.onDvtagReady?.(() => googletag.display('paychekgoeshere')); 717 window.onDvtagReady?.(() => googletag.display('prestitial-oop')); 718 }); 719 }); 720 } 721 722 723 setTimeout( 724 function () { 725 if (prestitialAds.overrideTimeout()) { 726 727 return; 728 } 729 730 if (!resolved && standardStatus === 'loaded') { 731 732 oopStatus = 'empty'; 733 resolvePrestitial(); 734 } 735 736 if (!resolved) { 737 738 resolved = true; 739 if (!prestitialAds.prestitialAdIsClosed()) {
740 prestitialAds.closePrestitial(); 741 } 742 return; 743 } 744 745 if (standardStatus === 'loaded' && oopStatus !== 'loaded') { 746 747 setTimeout( 748 function () { 749 // if the prestitial is already hidden, then don't hide it again. 750 if (!prestitialAds.prestitialAdIsClosed()) { 751 prestitialAds.closePrestitial(); 752 } 753 }, 754 prestitialAds.timeoutSeconds() 755 ); 756 } 757 758 }, 759 760 2900 761 ); 762 prestitialAds.sentPrestitialEligibleEvent(); 763 } else if (typeof prestitialAds !== 'undefined' && !prestitialAds.pageIsPrestitialEligible()){ 764 765 prestitialAds.closePrestitial(); 766 } 767 </script>
767 768 </div> 769 </section> 770 </div> 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 <!-- leaderboard --> 788 789 790 791 792 793 <!-- ITT cross pub nav --> 794 795 796 797<!-- Nav that lists the site's related publications including itt sites --> 798 799<div class="itt-cross-nav"> 800 <div class="itt-cross-nav-inner"> 801 <div class="desktop-section-wrapper"> 802 <a class="itt-brand analytics t-ittbanner-logo" href="https://www.informatechtarget.com/"> 803 <img class="itt-logo" src="https://d12v9rtnomnebu.cloudfront.net/logo/ITechTarget-Orbit-W_rgb.png" alt="Informa Tech Target Logo" height="16"> 804 <span class="itt-brand-name nav-item">Informa TechTarget</span> 805 <span class="nav-divider nav-item">|</span> 806 </a> 807 <ul class="itt-pubs list-no-bullets"> 808 809 </ul> 810 </div> 811 <div> 812 <a href="https://www.informatechtarget.com/our-brands/" class="desktop-cta nav-item-link analytics t-ittbanner-brands"> 813 <span>Explore our brands</span> 814 <img class="external-link-logo" src="https://d12v9rtnomnebu.cloudfront.net/logo/link-external-wht.svg" alt="Informa TechTarget Brands" height="12"> 815 </a> 816 <a href="https://www.informatechtarget.com/" class="mobile-cta nav-item-link analytics t-ittbanner-mobile">An Informa TechTarget Publication</a> 817 </div> 818 </div> 819</div> 820 821 822 823 824 <div class="page-container"> 825 826 827 828 829 830 831 832 833 834<header role="banner"> 835 <nav id="top" class="site-menu" aria-label="Site menu"> 836 <div class="site-menu-inner"> 837 <!-- logo --> 838 <div class="pub-logo-wrapper"> 839 <a href="/" class="analytics t-dash-navigation"> 840 841 <img class="pub-logo" src="https://d12v9rtnomnebu.cloudfront.net/logo/publications/education_black.svg" alt="Education Dive" height="28"> 842 843 </a> 844 </div> 845 <!-- desktop menu, not visible on mobile/tablet --> 846 <div class="menu-content-wrapper"> 847 <ul class="desktop-menu-main"> 848 849 <li> 850 <a href="/deep-dive/" class="nav-menu-item analytics t-deepdive-navigation">Deep Dive</a> 851 </li> 852 853 854 <li> 855 <a href="/opinion/" class="nav-menu-item analytics t-opinion-navigation">Opinion</a> 856 </li> 857 858 859 860 <li> 861 <a href="/library/" class="nav-menu-item analytics t-library-navigation">Library</a> 862 </li> 863 864 865 <li> 866 <a href="/events/" class="nav-menu-item analytics t-events-navigation">Events</a> 867 </li> 868 869 870 <li> 871 <a href="/press-release/" class="nav-menu-item analytics t-press-releases-navigation">Press Releases</a> 872 </li> 873 874 875 876 877 <li class="topics top-nav-dropdown-item"> 878 <button class="nav-menu-item topics-dropdown-item"> 879 Topics 880 <span class="dropdown-toggle-arrow"></span> 881 </button> 882 </li> 883 </ul> 884 <!-- mobile menu toggle icon, not visible on desktop --> 885 <a href="/signup/?signup_location=header" rel="nofollow" class="nav-menu-item nav-signup-button mobile-nav-signup-button analytics t-signup-navigation button"> 886 Sign up 887 </a> 888 <button class="mobile-menu-toggle"> 889 890 891 <img src="/static/img/menu_icons/menu_search.svg?252015011026" alt="menu" loading="lazy"> 892 893 </button> 894 <!-- newsletter and search, only shown on desktop --> 895 <ul class="desktop-menu-sub list-no-bullets"> 896 <li> 897 <button class="search-toggle search-button-front analytics t-search-navigation-top"> 898 899 900 <img src="/static/img/menu_icons/ai_search_black.svg?252015011026" alt="search" width="16" height="16" loading="lazy"> 901 902
903 <span class="sub-link">Search</span> 904 905 </button> 906 </li> 907 <li> 908 909 <a href="/signup/?signup_location=header" rel="nofollow" class="nav-menu-item nav-signup-button desktop-nav-signup-button analytics t-signup-navigation button"> 910 <img src="/static/img/email_icons/mail.svg?252015011026" width="16" height="11" loading="lazy" alt=""> 911 Sign up 912 </a> 913 </li> 914 </ul> 915 916 </div> 917 </div> 918 </nav> 919</header> 920 921 922 923<div 924 class="menu-search menu-search--semantic js-search-hide" 925 data-related-questions-url="/search/related-questions/" 926 data-search-url="/search/" 927> 928 <div class="menu-search-inner-wrapper menu-search-panel" role="region" aria-label="Search panel"> 929 <form action="/search/" method="GET" data-ajax="false" data-search-track data-search-tracking-url="/search/tracking/" class="menu-search-form"> 930 <label for="search-desktop"> 931 <span class="screen-reader-text search">Search</span> 932 </label> 933 <div class="menu-search-input-wrap"> 934 <input id="search-desktop" type="search" name="q" placeholder="Ask a question..." data-role="none" autocomplete="off"> 935 <button type="button" class="close menu-search-close" aria-label="Close search"> 936 <img src="/static/img/menu_icons/close.svg?252015011026" width="16" height="16" alt="" loading="lazy"> 937 </button> 938 <button type="submit" value="" data-role="none" class="search-button-front menu-search-submit analytics t-search-navigation-drawer" aria-label="Search"> 939 <img src="/static/img/menu_icons/ai_search.svg?252015011026" alt="" height="16" width="16" loading="lazy"> 940 </button> 941 </div> 942 </form> 943 <section class="menu-search-paa" aria-label="People also ask"> 944 <div class="menu-search-paa__header"> 945 <h2 class="dash-header">People also ask</h2> 946 </div> 947 <ul class="menu-search-paa__list js-menu-search-related-questions"> 948 <li class="menu-search-paa__item menu-search-paa__item--loading">Loading questions...</li> 949 </ul> 950 </section> 951 </div> 952</div> 953 954 955 956<nav class="topics menu-bar" aria-label="Menu bar"> 957 <ul class="list-no-bullets"> 958 959 960 <li> 961 <a class="analytics t-topic-navigation-HigherED" href="/topic/HigherED/">Higher Ed</a> 962 </li> 963 964 965 <li> 966 <a class="analytics t-topic-navigation-k12" href="/topic/k12/">K-12</a> 967 </li> 968 969 970 <li> 971 <a class="analytics t-topic-navigation-Technology" href="/topic/Technology/">Technology</a> 972 </li> 973 974 975 <li> 976 <a class="analytics t-topic-navigation-Policy" href="/topic/Policy/">Policy</a> 977 </li> 978 979 980 <li> 981 <a class="analytics t-topic-navigation-curriculum" href="/topic/curriculum/">Curriculum</a> 982 </li> 983 984 985 <li> 986 <a class="analytics t-topic-navigation-Online" href="/topic/Online/">Online Learning</a> 987 </li> 988 989 990 <li> 991 <a class="analytics t-topic-navigation-legal-courts" href="/topic/legal-courts/">Legal / Courts</a> 992 </li> 993 994 995 <li> 996 <a class="analytics t-topic-navigation-for-profit" href="/topic/for-profit/">For-Profit</a> 997 </li> 998 999 </ul> 1000</nav> 1001 1002 1003
1004<script type="module" src="/static/js/dist/navSignupHelper.bundle.js?162315011026" ></script>
1004 1005 1006
1007<script> 1008 window.siteName = 'Education Dive'; 1009</script>
1009 1010 1011 1012 1013 1014 1015 1016 <div class="search-overlay"></div> 1017 <div class="page-wrapper "> 1018 1019 <div class="page-inner-wrapper" id="skip-link-target"> 1020 1021 1022 1023 <section class="contact-header "> 1024 <div class="row"> 1025 <div class="medium-12 columns"> 1026 <h1 class="display-heading-04 display-heading-04--loud-centered contact-header__header-text">Contact us</h1> 1027 <div class="contact-header__subheader-text">Have a question? We're here to help.</div> 1028 </div> 1029 </div> 1030 </section> 1031 1032 1033 <section class="outreach"> 1034 <div class="row"> 1035 <div class="large-9 large-centered medium-12 medium-centered"> 1036 <div class="row columns"> 1037 <div class="columns medium-4"> 1038 <div class="outreach__box"> 1039 <h3 class="outreach__box__header uppercase-heading-02"> 1040 CONTACT THE<br />NEWSROOM 1041 </h3> 1042 <div class="outreach__box__links"> 1043 <div class="outreach__box__links__link"> 1044 <a class="analytics t-contact-editors" href="/editors/">Meet the editorial team</a> 1045 </div> 1046 <div class="outreach__box__links__link"> 1047 <a class="analytics t-contact-tip" href="/submit-tip/">Submit a tip</a> 1048 </div> 1049 1050 <div class="outreach__box__links__link"> 1051 <a class="analytics t-contact-opinion" href="/opinion/submit-opinion/">Pitch an opinion piece</a> 1052 </div> 1053 1054 </div> 1055 </div> 1056 </div> 1057 <div class="columns medium-4"> 1058 <div class="outreach__box"> 1059 <h3 class="outreach__box__header up
1059percase-heading-02"> 1060 REACH OUR<br />AUDIENCE 1061 </h3> 1062 <div class="outreach__box__links"> 1063 <div class="outreach__box__links__link"> 1064 <a class="analytics t-contact-advertise" href="/advertise/">Advertise with us</a> 1065 </div> 1066 1067 </div> 1068 </div> 1069 </div> 1070 <div class="columns medium-4"> 1071 <div class="outreach__box"> 1072 <h3 class="outreach__box__header uppercase-heading-02"> 1073 CORPORATE<br />INFORMATION 1074 </h3> 1075 <div class="outreach__box__links"> 1076 <div class="outreach__box__links__link"> 1077 <a class="analytics t-contact-blog" href="https://industrydive.com/news">Follow our corporate blog</a> 1078 </div> 1079 <div class="outreach__box__links__link"> 1080 <a class="analytics t-contact-privacy" href="https://www.informatechtarget.com/privacy-policy/">Read our privacy policy</a> 1081 </div> 1082 </div> 1083 </div> 1084 </div> 1085 </div> 1086 </div> 1087 </div> 1088 </section> 1089 1090 1091 <section class="contact-form"> 1092 <div class="row"> 1093 <div class="columns large-8 large-centered medium-9 medium-centered"> 1094 <h3 class="form__header contact-form__header">Get in touch with the Education Dive team</h3> 1095 1096 <form id="form-contact" class="form" method="post" action="/contact/#form-contact" onsubmit="javascript:$('input[name=js_enabled]').val('1')"> 1097 1098 <div class="fieldWrapper"> 1099 <label for="id_topic">How can we help you?</label> 1100 <select name="topic" title="Choose a topic for outreach." required id="id_topic"> 1101 <option value="" selected></option> 1102 1103</select> 1104 1105 <p class="form-error__message"></p> 1106 </div> 1107 1108 <div class="fieldWrapper"> 1109 <label for="id_name">Name:</label> 1110 <input type="text" name="name" title="Enter your name" autocomplete="off" required id="id_name"> 1111 1112 <p class="form-error__message"></p> 1113 </div> 1114 1115 <div class="fieldWrapper"> 1116 <label for="id_email">Email:</label> 1117 <input type="email" name="email" title="Enter your email" autocomplete="off" required id="id_email"> 1118 1119 <p class="form-error__message"></p> 1120 </div> 1121 1122 <div class="fieldWrapper"> 1123 <label for="id_message">Message:</label> 1124 <textarea name="message" cols="40" rows="10" title="Enter your message" autocomplete="off" required id="id_message"> 1125</textarea> 1126 1127 <p class="form-error__message"></p> 1128 </div> 1129 1130 1131 <div class="fieldWrapper"> 1132 <div style="display: none"> 1133 <label for="id_js_enabled">Js enabled:</label> 1134 <input type="hidden" name="js_enabled" value="0" id="id_js_enabled"> 1135 1136 </div> 1137 <p class="form-error__message"></p> 1138 </div> 1139 1140 <button type="submit" value="submit" id="submit-contact-form-button" class="contact-form__button button button--loud">Submit</button> 1141 </form> 1142 </div> 1143 </div> 1144 </section> 1145 1146 <section class="address-map"> 1147 <div class="row"> 1148 <div class="columns large-3 large-offset-1 medium-4"> 1149 <div class="address-map__address"> 1150 <div class="address-map__address__header"> 1151 TechTarget, Inc. 1152 </div> 1153 <div class="address-map__address__street"> 1154 275 Grove St. 1155 </div> 1156 <div class="address-map__address__city"> 1157 Newton, MA 02466 1158 </div> 1159 <div class="address-map__address__phone"> 1160 <a class="analytics t-contact-phone" href="tel:+12023312480">1.202.331.2480</a> 1161 </div> 1162 <div class="address-map__address__email"> 1163 <a class="analytics t-contact-email" href="/cdn-cgi/l/email-protection#adc4c3cbc2edc4c3c9d8ded9dfd4c9c4dbc883cec2c0"><span class="__cf_email__" data-cfemail="472e292128072e2923323433353e232e31226924282a">[email protected]</span></a> 1164 </div> 1165 </div> 1166 </div> 1167 <div class="columns large-6 end large-offset-1 medium-8"> 1168 <div class="address-map__map"> 1169 <div class='address-map__map__embed-container'> 1170 <iframe data-osano="MARKETING" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2949.168200190068!2d-71.25524412329055!3d42.33893717119476!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89e383a559884161%3A0x65907a64247889af!2sInforma%20TechTarget!5e0!3m2!1sen!2sus!4v1750176185294!5m2!1sen!2sus" width="529" height="349" frameborder="0" style="border:0" allowfullscreen"></iframe> 1171 </div> 1172 </div> 1173 </div> 1174 </div> 1175 </section>
vendor: 114 bytes, lines 1175-1177
1175 1176 1177 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1177<script> 1178 // Send contact form submission to GTM for GA4 1179 $('#form-contact').submit(function(e) { 1180 const eventObject = { 1181 event: 'user.contactSubmission', 1182 'user.contactSubmission': { 1183 v: 12,// <-- DO NOT EDIT. 1184 name: "Contact Form Submission" 1185 } 1186 } 1187 window.pushGTMEvent(eventObject) 1188 }); 1189 </script>
1189 1190 1191 1192 1193 1194 1195 1196 1197 </div> <!-- ends page-inner-wrapper --> 1198 1199 <section class="pre-footer"> 1200 1201 </section> 1202 1203 1204 1205 1206 1207 1208 1209 1210<hr class="footer-hr"> 1211<footer> 1212 <div class="custom-article-footer"> 1213 <div class="row columns"> 1214 <div class="footer-grid"> 1215 <div class="footer-links"> 1216 <img class="pub-logo-footer" src="https://d12v9rtnomnebu.cloudfront.net/logo/publications/education_black.svg" alt="Education Dive Logo" height="28" loading="lazy"/> 1217 1218 1219 1220 1221<ul class="social-icon-list social-icon-list__footer"> 1222 1223 <li> 1224 <a href="https://www.linkedin.com/showcase/education-dive-k12/" 1225 aria-label="Industry Dive LinkedIn" 1226 class="social-icon-footer analytics t-sitefooter-linkedin"> 1227 <img src="/static/img/social_icons/article_page/linkedin.svg?252015011026" alt=""> 1228 </a> 1229 </li> 1230 1231 1232 <li> 1233 <a href="https://www.facebook.com/EducationDive/" 1234 aria-label="Industry Dive Facebook" 1235 class="social-icon-footer analytics t-sitefooter-facebook"> 1236 <img src="/static/img/social_icons/article_page/facebook.svg?252015011026" alt=""> 1237 </a> 1238 </li> 1239 1240 1241 <li> 1242 <a href="https://twitter.com/EdDiveK12" 1243 aria-label="Industry Dive X/Twitter" 1244 class="social-icon-footer analytics t-sitefooter-twitter"> 1245 <img src="/static/img/social_icons/article_page/x.svg?252015011026" alt=""> 1246 </a> 1247 </li> 1248 1249 1250 1251 <li> 1252 <a href="https://www.educationdive.com/feeds/news/" 1253 aria-label="Industry Dive RSS feed" 1254 class="social-icon-footer analytics t-sitefooter-rss"> 1255 <img src="/static/img/social_icons/article_page/rss.svg?252015011026" alt=""> 1256 </a> 1257 </li> 1258</ul> 1259 1260 </div> 1261 <div class="link-wrapper"> 1262 <div class="footer-links"> 1263 <h4 class="uppercase-heading-01">Explore</h4> 1264 <ul class="list-no-bullets"> 1265 <li> 1266 <a href="/about/" class="analytics t-about-sitefooter">About</a> 1267 </li> 1268 1269 <li> 1270 <a href="/editors/" class="analytics t-editors-sitefooter">Editorial Team</a> 1271 </li> 1272 1273 <li> 1274 <a href="/contact/" class="analytics t-feedback-sitefooter">Contact Us</a> 1275 </li> 1276 1277 <li> 1278 <a href="/signup/?signup_location=footer-list&signup_path=/contact/" 1279 rel="nofollow" class="analytics t-signup-sitefooter">Newsletter</a> 1280 </li> 1281 1282 1283 1284 <li> 1285 <a class="analytics t-pr-sitefooter-all" href="/press-release/">Press Releases</a> 1286 </li> 1287 1288 1289 1290 1291 1292 <li> 1293 <a href="/what-we-are-reading/" class="analytics t-wwr-sitefooter">What We're Reading</a> 1294 </li> 1295 1296 1297 1298 1299 </ul> 1300 </div> 1301 <div class="second-column"> 1302 <div class="footer-links"> 1303 <h4 class="uppercase-heading-01">Reach our audience</h4> 1304 <ul class="list-no-bullets"> 1305 1306 <li> 1307 <a href="/advertise/" 1308 class="analytics t-advertising-sitefooter">Advertising</a> 1309 </li> 1310 1311 1312 1313 <li> 1314 <a class="analytics t-pr-sitefooter-all" href="/opinion/submit-opinion/">Submit an opinion piece</a> 1315 </li> 1316 1317 1318 1319 </ul> 1320 </div> 1321 <div class="footer-links"> 1322 1323 1324 1325 </div> 1326 </div> 1327 </div> 1328 </div> 1329 </div> 1330 </div> 1331</footer> 1332<hr class="footer-hr"> 1333<div class="baseline-footer-wrapper"> 1334 <div class="baseline-footer-logo"> 1335 <a href="https://www.informatechtarget.com"> 1336 <img src="/static/img/ITechTarget-Logo.png?252015011026" alt="Informa TechTarget" loading="lazy" /> 1337 </a> 1338 </div> 1339 <div class="baseline-footer-content"> 1340 <div> 1341 1342 This website is owned and operated by 1343 <a href="https://www.informatechtarget.com/" rel="noopener noreferrer">Informa TechTarget</a>, 1344 a global network that informs, influences and connects the world's technology buyers and sellers. 1345 1346 </div> 1347 <br> 1348 <div class="informa-legal-notice"> 1349 1350 1351<div class="baseline-footer"> 1352 © 2025 TechTarget, Inc. or its subsidiaries. All rights reserved. An Informa PLC company. 1353 <br> 1354 <a href="https://www.informatechtarget.com/privacy-policy/">Privacy policy</a> 1355 | <a href="https://www.informatechtarget.com/terms-of-use/">Terms of use</a> 1356 | <a href="https://www.industrydive.com/takedown-policy/">Take down policy</a> 1357 | <a href="#" onclick="Osano.cm.showDrawer('osano-cm-dom-info-dialog-open')">Cookie Preferences / Do Not Sell</a> 1358</div> 1359 1360 </div> 1361 </div> 1362</div> 1363 1364 1365 1366 </div> 1367 </div> 1368 1369 1370
1371 <!-- mobile menu, not visible on desktop, must go AFTER footer --> 1372 1373 1374 1375 1376 <nav class="mobile-menu"> 1377 <div class="mm-top-bar"> 1378 <div class="mm-search"> 1379 <form class="mm-search__form" action="/search/" method="GET" data-ajax="false" data-search-track data-search-tracking-url="/search/tracking/"> 1380 <label for="search-mobile" class="screen-reader-text">Search</label> 1381 <input 1382 id="search-mobile" 1383 class="mm-search__input" 1384 type="search" 1385 name="q" 1386 placeholder="Ask a question..." 1387 data-role="none" 1388 autocomplete="off" 1389 > 1390 <button 1391 type="button" 1392 class="mm-search__clear js-mm-search-clear" 1393 aria-label="Clear search" 1394 hidden 1395 > 1396 <img src="/static/img/components/forms/x-circle.svg?252015011026" width="16" height="16" alt=""> 1397 </button> 1398 </form> 1399 </div> 1400 1401 1402 <button type="button" class="mm-top-bar__close js-mm-close" aria-label="Close menu"> 1403 <img src="/static/img/menu_icons/close.svg?252015011026" width="16" height="16" alt=""> 1404 </button> 1405 1406 </div> 1407 1408 1409 1410 1411 1412 1413<ul class="mm-list list-no-bullets"> 1414 <li> 1415 <a href="/" class="analytics t-dash-navigation-mobile"> 1416 <span>Home</span> 1417 </a> 1418 </li> 1419 <li class="mm-accordion"> 1420 <button> 1421 <span>Topics</span> 1422 <span class="accordion-toggle-arrow"> 1423 <img src="/static/img/menu_icons/chevron_down.svg?252015011026" width="16" height="9" alt="down arrow" loading="lazy"> 1424 </span> 1425 </button> 1426 <ul class="list-no-bullets"> 1427 1428 1429 <li> 1430 <a class="analytics t-topic-navigation-mobile-HigherED" href="/topic/HigherED/">Higher Ed</a> 1431 </li> 1432 1433 1434 <li> 1435 <a class="analytics t-topic-navigation-mobile-k12" href="/topic/k12/">K-12</a> 1436 </li> 1437 1438 1439 <li> 1440 <a class="analytics t-topic-navigation-mobile-Technology" href="/topic/Technology/">Technology</a> 1441 </li> 1442 1443 1444 <li> 1445 <a class="analytics t-topic-navigation-mobile-Policy" href="/topic/Policy/">Policy</a> 1446 </li> 1447 1448 1449 <li> 1450 <a class="analytics t-topic-navigation-mobile-curriculum" href="/topic/curriculum/">Curriculum</a> 1451 </li> 1452 1453 1454 <li> 1455 <a class="analytics t-topic-navigation-mobile-Online" href="/topic/Online/">Online Learning</a> 1456 </li> 1457 1458 1459 <li> 1460 <a class="analytics t-topic-navigation-mobile-legal-courts" href="/topic/legal-courts/">Legal / Courts</a> 1461 </li> 1462 1463 1464 <li> 1465 <a class="analytics t-topic-navigation-mobile-for-profit" href="/topic/for-profit/">For-Profit</a> 1466 </li> 1467 1468 </ul> 1469 </li> 1470 1471 <li> 1472 <a href="/deep-dive/" class="analytics t-deepdive-navigation-mobile"> 1473 <span>Deep Dive</span> 1474 </a> 1475 </li> 1476 1477 1478 <li> 1479 <a href="/opinion/" class="analytics t-opinion-navigation-mobile"> 1480 <span>Opinion</span> 1481 </a> 1482 </li> 1483 1484 1485 1486 <li> 1487 <a href="/library/" class="analytics t-library-navigation-mobile"> 1488 <span>Library</span> 1489 </a> 1490 </li> 1491 1492 1493 <li> 1494 <a href="/events/" class="analytics t-events-navigation-mobile"> 1495 <span>Events</span> 1496 </a> 1497 </li> 1498 1499 1500 <li> 1501 <a href="/press-release/" class="analytics t-press-releases-navigation-mobile">
1502 <span>Press Releases</span> 1503 </a> 1504 </li> 1505 1506 1507 1508 1509</ul> 1510 1511 1512 1513 1514 1515 <section class="signup mm-signup"> 1516 <div class="row"> 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 <div class="large-9 medium-10 medium-centered columns"> 1529 <h3 class="display-heading-03 display-heading-03--loud">Get Education Dive in your inbox</h3> 1530 <p class="subhead">The free newsletter covering the top industry headlines</p> 1531 1532 <form class="form js-form-email-validate" name="signup" action="/signup/" method="POST"> 1533 1534 1535 <label for="id_5cc4ee_email" class="email-input js-email-input"> 1536 <span class="screen-reader-text">Email:</span> 1537 <input type="email" name="email" placeholder="Work email address" class="email" maxlength="320" required id="id_5cc4ee_email"> 1538 </label> 1539 1540 <span class="captcha-container"> 1541 <div class="g-recaptcha" data-sitekey="6LfnFggUAAAAAKaDTgN6vqjZtnNENIqa--TCG9F4" ></div> 1542 </span> 1543 1544 <input type="hidden" name="signup_box_location" value="integrated_menu"> 1545 <input type="hidden" name="signup_initial_url_path" value="/contact/"> 1546 <input type="hidden" name="signup_internal_referrer"> 1547 <input type="hidden" name="signup_external_referrer"> 1548 <input type="hidden" name="referral_url"> 1549 1550 1551 <input type="hidden" name="js_enabled" value="0" id="id_5cc4ee_js_enabled"> 1552 1553 1554 1555 <ul class="signup-list list-no-bullets"> 1556 1557 1558 1559 <li> 1560 <label><span class="screen-reader-text">Select Newsletter:</span></label> 1561 <input id="newsletter-integrated_menu-checkbox-20" 1562 type="checkbox" 1563 name="site_newsletters" 1564 value="20" 1565 class="checkbox" 1566 1567 /> 1568 <label for="newsletter-integrated_menu-checkbox-20"> 1569 <span class="newsletter-title">BioPharma Dive: Daily Dive</span> 1570 1571 <span class="secondary-label">M-F</span> 1572 1573 </label> 1574 </li> 1575 1576 <li> 1577 <label><span class="screen-reader-text">Select Newsletter:</span></label> 1578 <input id="newsletter-integrated_menu-checkbox-42" 1579 type="checkbox" 1580 name="site_newsletters" 1581 value="42" 1582 class="checkbox" 1583 1584 /> 1585 <label for="newsletter-integrated_menu-checkbox-42"> 1586 <span class="newsletter-title">BioPharma Dive: Commercialization Weekly</span> 1587 1588 <span class="secondary-label">Every Wednesday</span> 1589 1590 </label> 1591 </li> 1592 1593 <li> 1594 <label><span class="screen-reader-text">Select Newsletter:</span></label> 1595 <input id="newsletter-integrated_menu-checkbox-43" 1596 type="checkbox" 1597 name="site_newsletters" 1598 value="43" 1599 class="checkbox" 1600 1601 /> 1602 <label for="newsletter-integrated_menu-checkbox-43">
1603 <span class="newsletter-title">BioPharma Dive: Gene Therapy Weekly</span> 1604 1605 <span class="secondary-label">Every Thursday</span> 1606 1607 </label> 1608 </li> 1609 1610 <li> 1611 <label><span class="screen-reader-text">Select Newsletter:</span></label> 1612 <input id="newsletter-integrated_menu-checkbox-4" 1613 type="checkbox" 1614 name="site_newsletters" 1615 value="4" 1616 class="checkbox" 1617 1618 /> 1619 <label for="newsletter-integrated_menu-checkbox-4"> 1620 <span class="newsletter-title">Higher Ed Dive: Daily Dive</span> 1621 1622 <span class="secondary-label">M-F</span> 1623 1624 </label> 1625 </li> 1626 1627 <li> 1628 <label><span class="screen-reader-text">Select Newsletter:</span></label> 1629 <input id="newsletter-integrated_menu-checkbox-18" 1630 type="checkbox" 1631 name="site_newsletters" 1632 value="18" 1633 class="checkbox" 1634 1635 /> 1636 <label for="newsletter-integrated_menu-checkbox-18"> 1637 <span class="newsletter-title">K-12 Dive: Daily Dive</span> 1638 1639 <span class="secondary-label">M-F</span> 1640 1641 </label> 1642 </li> 1643 1644 1645 1646 <li> 1647 <label><span class="screen-reader-text">Select user consent:</span></label> 1648 <input type="checkbox" name="user_consent" id="id_user_consent-integrated_menu" value="1" class="checkbox"/> 1649 <label for="id_user_consent-integrated_menu"> 1650 <span class="signup-user-consent_box"> 1651 <span> 1652 By signing up to receive our newsletter, you agree to our 1653 <a href="https://www.informatechtarget.com/terms-of-use/" target="_blank">Terms of Use</a> and 1654 <a href="https://www.informatechtarget.com/privacy-policy/" target="_blank">Privacy Policy</a>. You can unsubscribe at anytime. 1655</span> 1656 1657 </span> 1658 </label> 1659 </li> 1660 </ul> 1661 1662 <button class="button button--medium signup-button" type="submit" value="Sign up">Sign up</button> 1663 1664 1665
1666<script type="module" src="/static/js/dist/sendEmailToLytics.bundle.js?162315011026" ></script>
1666 1667 1668 1669 <label class="error email_error" style="display:none;">A valid email address is required.</label> 1670 <label class="error newsletter-error" style="display:none;">Please select at least one newsletter.</label> 1671 </form> 1672 </div> 1673 1674 1675 1676 1677 1678 1679 </div> 1680 </section> 1681 1682 1683</nav> 1684 1685 1686 1687 1688 1689 1690 1691 1692<style> 1693 /* Keep this hidden until we need to show the v2 challenge. */ 1694 .captcha-container { display: none; } 1695</style>
1696<script> 1697 (function () { 1698 // v3-first, v2-fallback: score on submit via /signup/recaptcha-v3-score/; show checkbox challenge if score is low or v3 fails. 1699 1700 // Shared config: site keys and constants that are the same for every form on the page. 1701 // Set once; subsequent calls (e.g. from _signupform.html on landing pages) are no-ops. 1702 if (!window._signupRecaptchaSharedConfig) { 1703 window._signupRecaptchaSharedConfig = { 1704 v2ContainerSelector: '.captcha-container', 1705 v2ElementSelector: '.g-recaptcha', 1706 submitAction: 'signup_submit', 1707 scoreThreshold: 0.5, 1708 v2SiteKey: '6LfnFggUAAAAAKaDTgN6vqjZtnNENIqa\u002D\u002DTCG9F4', 1709 v3SiteKey: '6Lc\u002DlpYsAAAAAMhweO3XD1__w\u002DvHSSOVRRpARwEM' 1710 }; 1711 } 1712 1713 // Register per-form unique configs (only the params that differ per form). 1714 window._signupRecaptchaConfigs = window._signupRecaptchaConfigs || []; 1715 1716 // Multi-form mode: loop over the list supplied by the context processor. 1717 1718 window._signupRecaptchaConfigs.push({ 1719 key: 'generic_signup', 1720 formSelector: 'form.js\u002Dform\u002Demail\u002Dvalidate[name\u003D\u0022signup\u0022]' 1721 }); 1722 1723 window._signupRecaptchaConfigs.push({ 1724 key: 'signup_interstitial', 1725 formSelector: '#signup\u002Dinter\u002Dform' 1726 }); 1727 1728 1729 1730 // If we've already initialized once, skip doing it again. 1731 if (window._signupRecaptchaBootstrapped) { 1732 return; 1733 } 1734 window._signupRecaptchaBootstrapped = true; 1735 1736 // Strip odd characters so this is safe for dataset keys/callback names. 1737 function safeKey(str) { 1738 return String(str || 'default').replace(/[^a-zA-Z0-9_]/g, ''); 1739 } 1740 1741 // Load only the v3 script â it covers both v3 scoring and v2 widget rendering. 1742 // Avoid the plain api.js, which auto-renders all .g-recaptcha elements on load. 1743 function loadRecaptchaScripts(v3SiteKey) { 1744 if (!document.getElementById('signup-recaptcha-v3-script')) { 1745 var v3Script = document.createElement('script'); 1746 v3Script.id = 'signup-recaptcha-v3-script'; 1747 v3Script.src = 'https://www.google.com/recaptcha/api.js?render=' + encodeURIComponent(v3SiteKey); 1748 document.head.appendChild(v3Script); 1749 } 1750 } 1751 1752 // Get a v3 token, then let our backend verify and score it. 1753 function runV3AndScore(v3SiteKey, actionName) { 1754 return grecaptcha.execute(v3SiteKey, { action: actionName }) 1755 .then(function(token) { 1756 return fetch('/signup/recaptcha-v3-score/', { 1757 method: 'POST', 1758 headers: { 'Content-Type': 'application/json' }, 1759 body: JSON.stringify({ token: token, action: actionName }) 1760 }); 1761 }) 1762 .then(function(res) { return res.json(); }); 1763 } 1764 1765 // Wire recaptcha behavior to each form, merging shared constants with the per-form unique config. 1766 function wireConfig(formConfig, configIndex) { 1767 var shared = window._signupRecaptchaSharedConfig; 1768 var config = { 1769 key: formConfig.key, 1770 formSelector: formConfig.formSelector, 1771 v2ContainerSelector: shared.v2ContainerSelector, 1772 v2ElementSelector: shared.v2ElementSelector, 1773 submitAction: shared.submitAction, 1774 scoreThreshold: shared.scoreThreshold, 1775 v2SiteKey: shared.v2SiteKey, 1776 v3SiteKey: shared.v3SiteKey 1777 }; 1778 var forms = document.querySelectorAll(config.formSelector); 1779 forms.forEach(function(form, formIndex) { 1780 // Keep track of whether this form is wired/passed/already waiting on v2. 1781 var key = safeKey(config.key + '_' + configIndex + '_' + formIndex); 1782 var wiredFlag = 'recaptchaWired' + key; 1783 var passedFlag = 'recaptchaPassed' + key; 1784 var awaitingFlag = 'awaitingV2Challenge' + key; 1785 1786 if (form.dataset[wiredFlag] === 'true') { 1787 return; 1788 } 1789 form.dataset[wiredFlag] = 'true'; 1790 1791 var recaptchaElement = form.querySelector(config.v2ElementSelector); 1792 var widgetId = null; 1793 var v2WatcherInterval = null; 1794 1795 // Read the v2 response via widgetId, falling back to this form's textarea. 1796 function getV2Response() { 1797 var response = ''; 1798 try { 1799 response = widgetId !== null ? grecaptcha.getResponse(widgetId) : ''; 1800 } catch (e) { 1801 response = ''; 1802 } 1803 if (!response) { 1804 var textarea = form.querySelector('textarea[name="g-recaptcha-response"]'); 1805 if (textarea && textarea.value) { 1806 response = textarea.value; 1807 } 1808 } 1809 return response; 1810 } 1811 1812 // Once verified, mark the form so the submit handler lets it pass. 1813 function submitVerifiedForm() { 1814 if (form.dataset[passedFlag] === 'true') { 1815 return; 1816 } 1817 form.dataset[passedFlag] = 'true'; 1818 if (form.closest('.inline-signup')) { 1819 form.dispatchEvent(new CustomEvent('recaptcha:verified', { bubbles: false })); 1820 var inlineContainer = form.querySelector(config.v2ContainerSelector); 1821 if (inlineContainer) inlineContainer.style.display = 'none'; 1822 } 1823 form.submit(); 1824 } 1825 1826 // Show the v2 challenge and poll until we see a response token.
1827 function beginV2Challenge() { 1828 form.dataset[awaitingFlag] = 'true'; 1829 var container = form.querySelector(config.v2ContainerSelector); 1830 if (container) container.style.display = 'block'; 1831 1832 // Render the v2 widget on first challenge, not on page load. 1833 if (widgetId === null && recaptchaElement) { 1834 try { 1835 widgetId = grecaptcha.render(recaptchaElement, { 1836 sitekey: config.v2SiteKey, 1837 callback: submitVerifiedForm 1838 }); 1839 } catch (e) {} 1840 } 1841 1842 if (v2WatcherInterval) { 1843 clearInterval(v2WatcherInterval); 1844 } 1845 v2WatcherInterval = setInterval(function() { 1846 if (form.dataset[passedFlag] === 'true') { 1847 clearInterval(v2WatcherInterval); 1848 return; 1849 } 1850 var response = getV2Response(); 1851 if (response) { 1852 clearInterval(v2WatcherInterval); 1853 submitVerifiedForm(); 1854 } 1855 }, 250); 1856 } 1857 1858 // Main flow: validation first, then v3 score check, then v2 fallback if needed. 1859 form.addEventListener('submit', function(event) { 1860 if (form.dataset[passedFlag] === 'true') { 1861 return; 1862 } 1863 1864 // If a prior handler (e.g. email/checkbox validation) already stopped submission, bail out. 1865 if (event.defaultPrevented) { 1866 return; 1867 } 1868 1869 event.preventDefault(); 1870 1871 if (form.dataset[awaitingFlag] === 'true') { 1872 if (getV2Response()) { 1873 submitVerifiedForm(); 1874 } else { 1875 beginV2Challenge(); 1876 } 1877 return; 1878 } 1879 1880 grecaptcha.ready(function() { 1881 runV3AndScore(config.v3SiteKey, config.submitAction) 1882 .then(function(data) { 1883 var score = Number(data && data.score); 1884 var recaptchaSuccess = Boolean(data && (data.recaptcha_success || data.success)); 1885 var scorePass = !Number.isNaN(score) && score > config.scoreThreshold; 1886 1887 if (recaptchaSuccess && scorePass) { 1888 submitVerifiedForm(); 1889 return; 1890 } 1891 beginV2Challenge(); 1892 }) 1893 .catch(function() { 1894 // If v3 fails (network/API), still let real users complete v2. 1895 beginV2Challenge(); 1896 }); 1897 }); 1898 }); 1899 }); 1900 } 1901 1902 // Wire everything once grecaptcha is available. 1903 function setupAllConfigs() { 1904 if (typeof grecaptcha === 'undefined') { 1905 return false; 1906 } 1907 window._signupRecaptchaConfigs.forEach(function(formConfig, index) { 1908 wireConfig(formConfig, index); 1909 }); 1910 return true; 1911 } 1912 1913 document.addEventListener('DOMContentLoaded', function() { 1914 var v3SiteKey = window._signupRecaptchaSharedConfig.v3SiteKey; 1915 if (v3SiteKey) { 1916 loadRecaptchaScripts(v3SiteKey); 1917 } 1918 1919 if (setupAllConfigs()) { 1920 return; 1921 } 1922 1923 // Retry briefly while external recaptcha scripts finish loading. 1924 var attempts = 0; 1925 var interval = setInterval(function() { 1926 attempts += 1; 1927 if (typeof grecaptcha !== 'undefined') { 1928 clearInterval(interval); 1929 setupAllConfigs(); 1930 } else if (attempts > 50) { 1931 clearInterval(interval); 1932 } 1933 }, 100); 1934 }); 1935 })(); 1936</script>
1936 1937 1938 1939 1940 <!-- Track signups for Facebook Conversions API --> 1941 1942
1943<script type="module" src="/static/js/dist/signupValidation.bundle.js?162315011026" ></script>
1943 1944 1945 1946
1947<script type="module" src="/static/js/dist/gtmEvents.bundle.js?162315011026" ></script>
1947 1948 1949 <!-- Convert straight quotes to curly --> 1950 1951
1952<script type="module" src="/static/js/dist/smartQuotes.bundle.js?162315011026" ></script>
1952 1953 1954 <!-- HTMX press release analytics --> 1955 1956 1957
1958<script type="module" src="/static/js/dist/htmxPressReleaseAnalytics.bundle.js?162315011026" ></script>
1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969
1969<script> 1970 // Set cookie if we're on mobile app. Expire if we're not. This affects 1971 // which template is used to display the site to the user. 1972 $(document).ready(function() { 1973 // Get integer value of mobileapp param from URL and default to 0 if it doesn't exist 1974 var mobileapp = ''; 1975 1976 // Set cookie if mobileapp is 1 or 2 or expire cookie if mobileapp == 0 1977 if (mobileapp == '0') { 1978 document.cookie = 'mobileapp=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 1979 } else if (mobileapp == '1' || mobileapp == '2') { 1980 document.cookie = 'mobileapp=' + mobileapp + '; path=/;'; 1981 } 1982 1983 // There's no need to immediately load or preload print.css since it's not needed on page 1984 // load. Therefore, load it when the document is ready 1985 var stylesheet=document.createElement("link"); 1986 stylesheet.setAttribute("rel", "stylesheet"); 1987 stylesheet.setAttribute("type", "text/css"); 1988 stylesheet.setAttribute("media", "print"); 1989 if (window.location.pathname.includes('trendline')) { 1990 stylesheet.setAttribute("href", "/static/css/print_trendline.css?012315011026"); 1991 } 1992 else { 1993 stylesheet.setAttribute("href", "/static/css/print.css?012315011026"); 1994 } 1995 document.getElementsByTagName("head")[0].appendChild(stylesheet); 1996 }); 1997 </script>
1997 1998 1999 2000 2001 2002 2003 <!-- Sailthru Horizon --> 2004 2005 2006<!--
2006<script type="text/javascript" src="https://ak.sail-horizon.com/horizon/v1.js"></script>
2006 --> 2007
2008<script data-osano="MARKETING" src="https://ak.sail-horizon.com/spm/spm.v1.min.js"></script>
vendor: 1 bytes, line 2008
2008
2009<script type="text/javascript"> 2010 $(function() { 2011 // Sailthru Personalization Engine Setup 2012 var sailthru_setup = { 2013 customerId: '12ab35a80530ffa5450add9c09f5de04', 2014 domain: 'horizon.educationdive.com', 2015 spider: false 2016 }; 2017 2018 if (window.Sailthru) { 2019 Sailthru.init(sailthru_setup); 2020 } 2021 }); 2022</script>
2022 2023 2024 2025 2026 2027 </body> 2028</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.