import html2canvas from 'html2canvas';
(function() {
'use strict';
const bugReportContainer = document.getElementById( 'admin-bug-report' );
const toggleFormButton = bugReportContainer.querySelector( '.toggle-report-button' );
const toggleContainer = bugReportContainer.querySelector( '.toggle-container' );
function setupReportEvents() {
// Main toggle button
toggleFormButton.addEventListener( 'click', event => {
event.preventDefault();
event.stopPropagation();
if ( toggleContainer.classList.contains( 'is-open' ) ) {
toggleContainer.classList.remove( 'is-open' );
toggleContainer.setAttribute( 'aria-expanded', false );
toggleFormButton.setAttribute( 'aria-expanded', false );
toggleContainer.querySelector( 'textarea' ).blur();
} else {
toggleContainer.classList.add( 'is-open' );
toggleContainer.setAttribute( 'aria-expanded', true );
toggleFormButton.setAttribute( 'aria-expanded', true );
toggleContainer.querySelector( 'textarea' ).focus();
}
} );
// Bail early if we're missing settings
if ( toggleContainer.querySelector( '.invalid-settings' ) !== null ) {
return;
}
// Report form events
const reportContainer = toggleContainer.querySelector( '.report' );
const reportTextarea = toggleContainer.querySelector( 'textarea' );
const takeScreenShotButton = toggleContainer.querySelector( '.screenshot' );
const takeScreenShotButtonIcon = takeScreenShotButton.querySelector( '.camera-icon' );
const takeScreenShotValueField = reportContainer.querySelector( '.screen-uri' );
const processingContainer = bugReportContainer.querySelector( '.processing' );
const resultsContainer = bugReportContainer.querySelector( '.results' );
const successFailureContainers = resultsContainer.querySelectorAll( '.success, .failed' );
const closeResultsButtons = bugReportContainer.querySelectorAll( '.close, .close-results' );
const reportForm = reportContainer.querySelector( 'form' );
// Screenshot
takeScreenShotButton.addEventListener( 'click', event => {
event.preventDefault();
takeScreenShotButtonIcon.classList.remove( 'fa-camera' );
takeScreenShotButtonIcon.classList.add( 'fa-refresh', 'fa-spin' );
html2canvas( document.body).then( canvas => {
takeScreenShotValueField.value = canvas.toDataURL( 'image/png' );
takeScreenShotButtonIcon.classList.remove( 'fa-refresh', 'fa-spin' );
takeScreenShotButtonIcon.classList.add( 'fa-check' );
} );
} );
// Results reset
closeResultsButtons.forEach( button => {
button.addEventListener( 'click', event => {
toggleContainer.classList.remove( 'is-open' );
resultsContainer.classList.remove( 'is-open' );
successFailureContainers.forEach( container => {
container.classList.remove( 'is-open' );
} );
reportContainer.classList.add( 'is-open' );
takeScreenShotButtonIcon.classList.remove( 'fa-check' );
takeScreenShotButtonIcon.classList.add( 'fa-camera' );
takeScreenShotValueField.value = '';
reportTextarea.value = '';
} );
} );
// Form submission
reportForm.addEventListener( 'submit', event => {
event.preventDefault();
if ( reportTextarea.value == '' && takeScreenShotValueField.value == '' ) {
return false;
}
reportContainer.classList.remove( 'is-open' );
processingContainer.classList.add( 'is-open' );
const formData = new FormData();
const data = {
action: 'admin_bug_report_submit',
security: abr.NONCES.SUBMIT_REPORT,
message: reportTextarea.value,
screenshot: takeScreenShotValueField.value,
globals: JSON.stringify( abr.GLOBALS )
};
for ( let key in data ) {
formData.append( key, data[key] );
}
fetch( abr.AJAX_URL, {
method: 'post',
body: formData
} ).then( response => {
return response.json();
} ).then( data => {
processingContainer.classList.remove( 'is-open' );
resultsContainer.classList.add( 'is-open' );
if ( data.success ) {
resultsContainer.querySelector( '.success' ).classList.add( 'is-open' );
} else {
resultsContainer.querySelector( '.failed' ).classList.add( 'is-open' );
}
} );
} );
}
setupReportEvents();
} )();