- WordPress core y plugins - Tema Twenty Twenty-Four configurado - Plugin allow-unfiltered-html.php simplificado - .gitignore configurado para excluir wp-config.php y uploads 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
135 lines
2.8 KiB
JavaScript
Executable File
135 lines
2.8 KiB
JavaScript
Executable File
(function () {
|
|
/**
|
|
* Placements to be tested against each other
|
|
*
|
|
* @type {{}}
|
|
*/
|
|
const candidates = {};
|
|
|
|
/**
|
|
* Update the candidate placement list
|
|
*
|
|
* @param {string} slug placement slug.
|
|
* @param {number} weight test weight.
|
|
*/
|
|
const updateCandidates = (slug, weight) => {
|
|
if (isNaN(weight) && 'undefined' !== typeof candidates[slug]) {
|
|
delete candidates[slug];
|
|
return;
|
|
}
|
|
|
|
candidates[slug] = weight;
|
|
};
|
|
|
|
/**
|
|
* Check the visibility of the various "Save new test" buttons.
|
|
*
|
|
* @param {Node} input test weight select input.
|
|
*/
|
|
const updateButton = (input) => {
|
|
document.querySelectorAll('.save-new-test').forEach((el) => {
|
|
el.classList.add('hidden');
|
|
});
|
|
if (1 < Object.keys(candidates).length) {
|
|
input
|
|
.closest('td')
|
|
.querySelector('.save-new-test')
|
|
.classList.remove('hidden');
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Save a new test into the database
|
|
*/
|
|
const saveNewTest = () => {
|
|
wp.ajax
|
|
.post('advads_new_placement_test', {
|
|
nonce: document
|
|
.getElementById('placement-ajax-nonce')
|
|
.innerText.trim(),
|
|
candidates,
|
|
})
|
|
.always(function () {
|
|
document.location.reload();
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Update current tests data
|
|
*/
|
|
const updateTests = () => {
|
|
const testsData = {};
|
|
const inputs = document
|
|
.getElementById('placement-tests')
|
|
.querySelectorAll('input,select');
|
|
inputs.forEach((input) => {
|
|
const name = input.name;
|
|
if (!name) {
|
|
return;
|
|
}
|
|
|
|
if ('checkbox' === input.type && !input.checked) {
|
|
return;
|
|
}
|
|
|
|
testsData[name] = input.value;
|
|
});
|
|
|
|
testsData.nonce = document
|
|
.getElementById('placement-ajax-nonce')
|
|
.innerText.trim();
|
|
|
|
inputs.forEach((el) => {
|
|
el.disabled = true;
|
|
});
|
|
|
|
wp.ajax
|
|
.post('advads_update_placement_tests', testsData)
|
|
.always(function () {
|
|
document.location.reload();
|
|
});
|
|
};
|
|
|
|
// Test weight edited.
|
|
document.getElementById('posts-filter').addEventListener('change', (ev) => {
|
|
if (!ev.target.classList.contains('advads-add-to-placement-test')) {
|
|
return;
|
|
}
|
|
|
|
const input = ev.target;
|
|
updateCandidates(input.dataset.slug, parseInt(input.value, 10));
|
|
updateButton(input);
|
|
});
|
|
|
|
// Create a new test.
|
|
document.getElementById('posts-filter').addEventListener('click', (ev) => {
|
|
if (!ev.target.classList.contains('save-new-test')) {
|
|
return;
|
|
}
|
|
|
|
if (!Object.keys(candidates).length) {
|
|
return;
|
|
}
|
|
|
|
ev.target.classList.add('hidden');
|
|
document
|
|
.querySelectorAll('.advads-add-to-placement-test')
|
|
.forEach((el) => {
|
|
el.disabled = true;
|
|
});
|
|
|
|
ev.preventDefault();
|
|
saveNewTest();
|
|
});
|
|
|
|
// Update current tests.
|
|
const updateTestsButton = document.getElementById('update-placement-tests');
|
|
|
|
if (updateTestsButton) {
|
|
updateTestsButton.addEventListener('click', (ev) => {
|
|
ev.preventDefault();
|
|
updateTests();
|
|
});
|
|
}
|
|
})();
|