149 lines
3.5 KiB
JavaScript
149 lines
3.5 KiB
JavaScript
( function() {
|
||
'use strict';
|
||
|
||
/**
|
||
* Build a form-encoded payload and send it without relying on jQuery.
|
||
*
|
||
* @param {string} action
|
||
* @param {Object} data
|
||
* @returns {void}
|
||
*/
|
||
const postNoticeAction = function( action, data ) {
|
||
if ( ! window.cnArgsNotice || ! cnArgsNotice.ajaxURL ) {
|
||
return;
|
||
}
|
||
|
||
const bodyParams = {
|
||
action: action,
|
||
notice_action: data.noticeAction,
|
||
nonce: data.nonce,
|
||
cn_network: cnArgsNotice.network ? 1 : 0
|
||
};
|
||
|
||
if ( typeof data.param !== 'undefined' ) {
|
||
bodyParams.param = data.param;
|
||
}
|
||
|
||
const encodeBody = function( params ) {
|
||
return Object.keys( params )
|
||
.map( function( key ) {
|
||
return encodeURIComponent( key ) + '=' + encodeURIComponent( params[ key ] );
|
||
} )
|
||
.join( '&' );
|
||
};
|
||
|
||
const body = encodeBody( bodyParams );
|
||
|
||
if ( window.fetch ) {
|
||
fetch( cnArgsNotice.ajaxURL, {
|
||
method: 'POST',
|
||
credentials: 'same-origin',
|
||
headers: {
|
||
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
||
},
|
||
body: body
|
||
} ).catch( function() {
|
||
// fail silently – notice still closes
|
||
} );
|
||
} else {
|
||
// XHR fallback for older browsers.
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open( 'POST', cnArgsNotice.ajaxURL, true );
|
||
xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8' );
|
||
xhr.send( body );
|
||
}
|
||
};
|
||
|
||
const hideNotice = function( notice ) {
|
||
if ( notice ) {
|
||
notice.style.display = 'none';
|
||
}
|
||
};
|
||
|
||
document.addEventListener( 'DOMContentLoaded', function() {
|
||
// No cookie compliance notice.
|
||
document.addEventListener( 'click', function( event ) {
|
||
const target = event.target;
|
||
|
||
if ( ! target || typeof target.closest !== 'function' ) {
|
||
return;
|
||
}
|
||
|
||
const dismissButton = target.closest( '.cn-notice .cn-no-compliance .cn-notice-dismiss' );
|
||
|
||
if ( ! dismissButton ) {
|
||
return;
|
||
}
|
||
|
||
const notice = dismissButton.closest( '.cn-notice' );
|
||
|
||
if ( ! notice ) {
|
||
return;
|
||
}
|
||
|
||
event.preventDefault();
|
||
|
||
let noticeAction = 'dismiss';
|
||
let param = '';
|
||
|
||
if ( dismissButton.classList.contains( 'cn-approve' ) ) {
|
||
noticeAction = 'approve';
|
||
} else if ( dismissButton.classList.contains( 'cn-delay' ) ) {
|
||
noticeAction = 'delay';
|
||
} else if ( notice.classList.contains( 'cn-threshold' ) ) {
|
||
noticeAction = 'threshold';
|
||
|
||
const noticeText = notice.querySelector( '.cn-notice-text' );
|
||
const delay = noticeText && noticeText.dataset ? parseInt( noticeText.dataset.delay, 10 ) : NaN;
|
||
|
||
param = ! isNaN( delay ) && isFinite( delay ) ? delay : '';
|
||
}
|
||
|
||
postNoticeAction( 'cn_dismiss_notice', {
|
||
noticeAction: noticeAction,
|
||
nonce: cnArgsNotice.nonce,
|
||
param: param
|
||
} );
|
||
|
||
hideNotice( notice );
|
||
} );
|
||
|
||
// Review notice.
|
||
document.addEventListener( 'click', function( event ) {
|
||
const target = event.target;
|
||
|
||
if ( ! target || typeof target.closest !== 'function' ) {
|
||
return;
|
||
}
|
||
|
||
const link = target.closest( '.cn-notice .cn-review .button-link' );
|
||
|
||
if ( ! link ) {
|
||
return;
|
||
}
|
||
|
||
const notice = link.closest( '.cn-notice' );
|
||
|
||
if ( ! notice ) {
|
||
return;
|
||
}
|
||
|
||
event.preventDefault();
|
||
|
||
let noticeAction = 'dismiss';
|
||
|
||
if ( link.classList.contains( 'cn-notice-review' ) ) {
|
||
noticeAction = 'review';
|
||
} else if ( link.classList.contains( 'cn-notice-delay' ) ) {
|
||
noticeAction = 'delay';
|
||
}
|
||
|
||
postNoticeAction( 'cn_review_notice', {
|
||
noticeAction: noticeAction,
|
||
nonce: cnArgsNotice.reviewNonce
|
||
} );
|
||
|
||
hideNotice( notice );
|
||
} );
|
||
} );
|
||
} )(); |