Skip to content

Instantly share code, notes, and snippets.

@lpappone
Created May 23, 2019 22:16
Show Gist options
  • Save lpappone/e5879d9bd5ca19b24a29baa6de21a2be to your computer and use it in GitHub Desktop.
Save lpappone/e5879d9bd5ca19b24a29baa6de21a2be to your computer and use it in GitHub Desktop.
!function(){"use strict";function e(){a("info",[].slice.call(arguments))}function t(){a("warn",[].slice.call(arguments))}function r(){a("error",[].slice.call(arguments))}const a=(e,t)=>{var r,a="[Microsnippet] ",n=console;switch(e){case"debug":r=n.debug;break;case"warn":r=n.warn;break;case"error":r=n.error;break;default:r=n.log,e="info"}a=e.toUpperCase()+" : "+a,r.apply(null,[a].concat(t))};var n={t:r,s:e,i:t};const s=(e,t)=>{for(var r in e)e.hasOwnProperty(r)&&t(e[r],r)},i=e=>"function"==typeof e,c=e=>!!e&&"object"==typeof e,o=e=>void 0===e,_=(e,t)=>{var r=document.querySelector("head"),a=document.createElement("script");a.type="text/javascript",t?a.async=!1:a.defer=!0,a.src=e,r.insertBefore(a,r.firstChild)};let d=0;const u=()=>d++,p=e=>Array.prototype.slice.call(e.querySelectorAll("*"));var h={o:e=>{var t=window.optimizely.push.bind(window.optimizely);e.errorData&&t({type:"microsnippetError",engine:"microsnippet",errorData:e.errorData}),e.visitorId&&t({type:"user",visitorId:e.visitorId}),e.decisions&&e.decisions.forEach(e=>{t({type:"event",eventType:"decision",eventData:{layerId:e.layerId,experimentId:e.experimentId,variationId:e.variationId}})}),e.activeViews&&e.activeViews.forEach(e=>{t({type:"event",eventType:"pageview",eventData:{id:e.id,apiName:e.apiName}})})}};let f={};function b(e){return Object.freeze(Object.assign({},f))[e]}function v(e,t){Object.assign(f,{[e]:t})}function l(){f={}}var g={get:b,set:v,reset:l};function m({message:e,err:t=null,args:r=[]}){let a={errorData:{code:e,metadata:{},msVersion:g.get("msVersion"),requestId:g.get("requestId"),projectId:g.get("projectId"),snippetKey:g.get("snippetKey")}},s=[e].concat(r);t&&(a.errorData.metadata.err=t,s=s.concat(t)),r.length&&(a.errorData.args=r),n.t.apply(this,s),h.o(a)}var w={_:e=>{try{i(e)?e():m({message:"2.0"})}catch(e){m({message:"2.1",err:e})}}},y={u:{p:"after",h:"append",v:"before",l:"prepend"},g:{m:"afterbegin",k:"afterend",I:"beforebegin",T:"beforeend"},A:{j:"class",O:"href",D:"html",R:"src",N:"style",P:"text",M:"remove",C:"hide"}};const E=(e,t)=>{if(0===Object.keys(t.css))return t.attributes.style;var r="",a=t.attributes&&t.attributes.style||"";return s(t.css,(e,t)=>{new RegExp(t+"\\s?:").test(a)||(r+=t+":"+e+";")}),o(t.attributes.style)?(e||"")+r:r+a};var k,I,T=document,A={attributes:!0,childList:!0,subtree:!0,characterData:!0};const j=()=>{k={},I=new MutationObserver(function(){this.disconnect(),Object.keys(k).forEach(R),this.observe(T,A)})},O=()=>{I.observe(T,A)},D=(e,t)=>{I||j();var r=u();return k[r]={selector:e,callback:t},setTimeout(R.bind(null,r),0),O(),()=>{delete k[r],0===Object.keys(k).length&&I.disconnect()}},R=e=>{var t=k[e];if(!t||!t.selector)return delete k[e],void n.i("MutationObserver - Tried to match observer with selector missing");var r=[];try{r=document.querySelectorAll(t.selector)}catch(r){m({err:r,message:"3.0",args:[t.selector]}),delete k[e]}r.forEach(r=>{r.F&&r.F[e]||(r.F=r.F||{},r.F[e]=!0,t.callback(r))})};var N={S:j,L:D},P="optly_change_",M="CHANGE_APPLIER",C=e=>{new F(e.changes)._()};function F(e){this.B=e,this.H=[]}var S=F.prototype;S._=function(){return this.B.forEach(e=>{switch(e.type){case"attribute":this.H.push(N.L(e.selector,this.V.bind(this,e,u())));break;case"append":this.H.push(N.L(e.selector,this.q.bind(this,e,u())));break;case"custom_code":this.G(e);break;case"rearrange":Promise.all([new Promise(t=>{this.H.push(N.L(e.selector,t))}),new Promise(t=>{this.H.push(N.L(e.insertSelector,t))})]).then(this.K.bind(this,e));break;default:m({message:"1.0",args:[e.type]})}}),this.J.bind(this)},S.V=function(e,t,r){var a=P+t;if(r.hasAttribute(a))n.s(M,"AttributeChange not being applied. Element already changed",r);else{n.s(M,"Applying attribute change for: ",e.selector),s(e.attributes,(e,t)=>{switch(t){case y.A.j:o(r.className)||(r.className=e);break;case y.A.O:o(r.href)||(r.href=e);break;case y.A.D:o(r.innerHTML)||(r.innerHTML=e,p(r).forEach(e=>{e.setAttribute(a,"")}));break;case y.A.R:o(r.src)||(r.src=e);break;case y.A.N:break;case y.A.P:o(r.textContent)||(r.textContent=e);break;default:m({message:"1.1",args:[t]})}});var i=E(r.style.cssText,e);"string"==typeof i&&(r.style.cssText=i)}},F.prototype.q=function(e,t,r){var a=P+t;if(r.hasAttribute(a))return void n.s(M,"AppendChange not being applied. Element already changed",r);function s(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes.length}function i(e,t,r){for(var a=e,n=[],s=0;s<t;s++)r?(n.push(a.nextSibling),a=a.nextSibling):(n.push(a.previousSibling),a=a.previousSibling);return n}function c(e){for(var t=e.parentNode;t.nodeType!==Node.ELEMENT_NODE;)t=t.parentNode;return t}let o;switch(n.s(M,"Applying append change for: ",e.selector),e.operator){case y.u.p:o=y.g.k;break;case y.u.h:o=y.g.T;break;case y.u.v:o=y.g.I;break;case y.u.l:o=y.g.m;break;default:o=y.g.T}r.insertAdjacentHTML(o,e.value);var _,d,u=s(e.value)-1;o===y.g.T?d=i(_=r.lastChild,u,!1):o===y.g.m?d=i(_=r.firstChild,u,!0):o===y.g.I?d=i(_=r.previousSibling,u,!1):o===y.g.k&&(d=i(_=r.nextSibling,u,!0)),d.unshift(_),d.forEach(e=>{var t=e.nodeType===Node.ELEMENT_NODE?e:c(e);t.setAttribute(a,""),p(t).forEach(e=>{e.setAttribute(a,"")})})},S.K=function(e){document.querySelectorAll(e.selector).forEach(t=>{var r=t.parentNode.removeChild(t),a=document.querySelector(e.insertSelector),n=a.parentNode;switch(e.operator){case y.u.v:n.insertBefore(r,a);break;case y.u.p:n.insertBefore(r,a.nextSibling);break;case y.u.l:var s=a.firstChild;a.insertBefore(r,s);break;case y.u.h:a.appendChild(r)}})},S.G=function(e){try{e.value()}catch(e){m({message:"1.2",err:e})}},S.J=function(){for(;this.H.length;)this.H.shift()()};const L=()=>window&&document&&window.MutationObserver;var B=e=>{c(e)?L()?(window.optimizely=window.optimizely||[],n.s("MAIN - Initializing with:",e),"projectJS"in e&&w._(e.projectJS),h.o(e),"changeSets"in e&&e.changeSets.forEach(C),e.trackingSnippetURL&&_(e.trackingSnippetURL)):m({message:"0.2"}):m({message:"0.1"})},H=__DATA__;try{g.set("msVersion","0.0.13-alpha.0"),g.set("requestId",H.requestId),g.set("projectId",H.projectId),g.set("snippetKey",H.snippetKey),B(H)}catch(e){m({message:"0.0",err:e})}}();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment