File: /var/www/gosurya-id/wp-content/plugins/jetpack/modules/wordads/js/wordads-ccpa.js
/**
* Outputs Javascript to handle California IP detection, consent modal, and setting of default cookies.
*/
( function () {
/* global ccpaSettings */
// Minimal Mozilla Cookie library
// https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework
var cookieLib = {
getItem: function ( e ) {
return (
( e &&
decodeURIComponent(
document.cookie.replace(
new RegExp(
'(?:(?:^|.*;)\\s*' +
encodeURIComponent( e ).replace( /[\-\.\+\*]/g, '\\$&' ) +
'\\s*\\=\\s*([^;]*).*$)|^.*$'
),
'$1'
)
) ) ||
null
);
},
setItem: function ( e, o, n, t, r, i ) {
if ( ! e || /^(?:expires|max\-age|path|domain|secure)$/i.test( e ) ) {
return ! 1;
}
var c = '';
if ( n ) {
switch ( n.constructor ) {
case Number:
c = n === 1 / 0 ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : '; max-age=' + n;
break;
case String:
c = '; expires=' + n;
break;
case Date:
c = '; expires=' + n.toUTCString();
}
}
return (
( 'rootDomain' !== r && '.rootDomain' !== r ) ||
( r =
( '.rootDomain' === r ? '.' : '' ) +
document.location.hostname.split( '.' ).slice( -2 ).join( '.' ) ),
( document.cookie =
encodeURIComponent( e ) +
'=' +
encodeURIComponent( o ) +
c +
( r ? '; domain=' + r : '' ) +
( t ? '; path=' + t : '' ) +
( i ? '; secure' : '' ) ),
! 0
);
},
};
// Implement IAB USP API.
window.__uspapi = function ( command, version, callback ) {
if ( typeof callback !== 'function' ) {
return;
}
if ( command !== 'getUSPData' || version !== 1 ) {
callback( null, false );
return;
}
// Check for GPC.
if ( navigator.globalPrivacyControl ) {
callback( { version: 1, uspString: '1YYN' }, true );
return;
}
// Check for cookie.
var consent = cookieLib.getItem( 'usprivacy' );
if ( null === consent ) {
callback( null, false );
return;
}
callback( { version: 1, uspString: consent }, true );
};
var setDefaultOptInCookie = function () {
var value = ccpaSettings.defaultOptinCookieString;
var domain =
'.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
cookieLib.setItem( 'usprivacy', value, 365 * 24 * 60 * 60, '/', domain );
};
var setCcpaAppliesCookie = function ( value ) {
var domain =
'.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname;
cookieLib.setItem( 'ccpa_applies', value, 24 * 60 * 60, '/', domain );
};
var injectLoadingMessage = function () {
var wrapper = document.createElement( 'div' );
document.body.insertBefore( wrapper, document.body.firstElementChild );
wrapper.outerHTML =
'<div id="ccpa-loading" class="cleanslate ccpa__loading-wrapper">' +
'<div class="ccpa__loading-overlay">' +
'<span class="ccpa__loading-message">' +
ccpaSettings.strings.pleaseWait +
'...</span>' +
'</div>' +
'</div>';
};
var destroyModal = function () {
var node = document.querySelector( '#ccpa-modal' );
if ( node ) {
node.parentElement.removeChild( node );
}
};
var injectModal = function () {
destroyModal();
injectLoadingMessage();
var request = new XMLHttpRequest();
request.open(
'GET',
ccpaSettings.ajaxUrl + '?action=privacy_optout_markup&security=' + ccpaSettings.ajaxNonce,
true
);
request.onreadystatechange = function () {
if ( 4 === this.readyState ) {
if ( 200 === this.status ) {
document.getElementById( 'ccpa-loading' ).remove();
var wrapper = document.createElement( 'div' );
document.body.insertBefore( wrapper, document.body.firstElementChild );
wrapper.outerHTML = this.response;
document.getElementById( 'ccpa-opt-out' ).focus();
var optOut = document.querySelector( '#ccpa-modal .opt-out' );
optOut.addEventListener( 'click', function ( e ) {
var post = new XMLHttpRequest();
post.open( 'POST', ccpaSettings.ajaxUrl, true );
post.setRequestHeader(
'Content-Type',
'application/x-www-form-urlencoded; charset=UTF-8'
);
post.onreadystatechange = function () {
if ( 4 === this.readyState ) {
if ( 200 === this.status ) {
var result = JSON.parse( this.response );
if ( result && result.success ) {
// Note: Cooke is set in HTTP response from POST, so only need to update the toggle switch state.
if ( result.data ) {
e.target.parentNode.classList.add( 'is-checked' );
e.target.parentNode.parentNode.classList.add( 'is-checked' );
} else {
e.target.parentNode.classList.remove( 'is-checked' );
e.target.parentNode.parentNode.classList.remove( 'is-checked' );
}
}
}
}
};
post.send(
'action=privacy_optout&optout=' +
e.target.checked +
'&security=' +
ccpaSettings.ajaxNonce
);
} );
// need to init status based on cookie
var usprivacyCookie = cookieLib.getItem( 'usprivacy' );
var optout = usprivacyCookie && 'Y' === usprivacyCookie[ 2 ];
var toggle = document.querySelector( '#ccpa-modal .opt-out' );
toggle.checked = optout;
if ( optout ) {
toggle.parentNode.classList.add( 'is-checked' );
toggle.parentNode.parentNode.classList.add( 'is-checked' );
}
var buttons = document.querySelectorAll( '#ccpa-modal .components-button' );
Array.prototype.forEach.call( buttons, function ( el ) {
el.addEventListener( 'click', function () {
destroyModal();
} );
} );
}
}
};
request.send();
};
var doNotSellCallback = function () {
var dnsLinks = document.querySelectorAll( '.ccpa-do-not-sell' );
if ( 0 === dnsLinks.length ) {
return false;
}
Array.prototype.forEach.call( dnsLinks, function ( dnsLink ) {
dnsLink.addEventListener( 'click', function ( e ) {
e.preventDefault();
if ( ! ccpaSettings.stylesLoaded ) {
// Load wordads-ccpa.min.css
var ccpaCss = document.createElement( 'link' );
ccpaCss.rel = 'stylesheet';
ccpaCss.type = 'text/css';
ccpaCss.href = ccpaSettings.ccpaCssUrl;
document.getElementsByTagName( 'HEAD' )[ 0 ].appendChild( ccpaCss );
ccpaSettings.stylesLoaded = true;
}
injectModal();
} );
dnsLink.style.display = '';
} );
return true;
};
// Initialization.
document.addEventListener( 'DOMContentLoaded', function () {
// CCPA consent value storage.
var usprivacyCookie = cookieLib.getItem( 'usprivacy' );
if ( null !== usprivacyCookie ) {
doNotSellCallback();
return;
}
// Cache for geo location.
var ccpaCookie = cookieLib.getItem( 'ccpa_applies' );
if ( null === ccpaCookie ) {
var request = new XMLHttpRequest();
request.open( 'GET', 'https://public-api.wordpress.com/geo/', true );
request.onreadystatechange = function () {
if ( 4 === this.readyState ) {
if ( 200 === this.status ) {
var data = JSON.parse( this.response );
var ccpa_applies = data[ 'region' ] && data[ 'region' ].toLowerCase() === 'california';
setCcpaAppliesCookie( ccpa_applies );
if ( ccpa_applies ) {
if ( doNotSellCallback() ) {
setDefaultOptInCookie();
}
}
} else {
setCcpaAppliesCookie( true );
if ( doNotSellCallback() ) {
setDefaultOptInCookie();
}
}
}
};
request.send();
} else {
if ( ccpaCookie === 'true' ) {
if ( doNotSellCallback() ) {
setDefaultOptInCookie();
}
}
}
// Check for override for site admins.
if ( 'true' === ccpaSettings.forceApplies ) {
doNotSellCallback();
return;
}
} );
} )();