feat(cloudron): add tirreno package artifacts
- Add CloudronStack/output/CloudronPackages-Artifacts/tirreno/ directory and its contents - Includes package manifest, Dockerfile, source code, documentation, and build artifacts - Add tirreno-1761840148.tar.gz as a build artifact - Add tirreno-cloudron-package-1761841304.tar.gz as the Cloudron package - Include all necessary files for the tirreno Cloudron package This adds the complete tirreno Cloudron package artifacts to the repository.
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
import {renderUserActionButtons} from './DataRenderers.js?v=2';
|
||||
import {handleAjaxError} from './utils/ErrorHandler.js?v=2';
|
||||
|
||||
export class UserGridActionButtons {
|
||||
|
||||
constructor(tableId) {
|
||||
this.tableId = tableId;
|
||||
const onTableLoaded = this.onTableLoaded.bind(this);
|
||||
window.addEventListener('tableLoaded', onTableLoaded, false);
|
||||
}
|
||||
|
||||
onTableLoaded(e) {
|
||||
const tableId = e.detail.tableId;
|
||||
const buttons = document.querySelectorAll(`#${tableId} button`);
|
||||
|
||||
const onButtonClick = this.onButtonClick.bind(this);
|
||||
buttons.forEach(button => button.addEventListener('click', onButtonClick, false));
|
||||
}
|
||||
|
||||
onButtonClick(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
const me = this;
|
||||
const target = e.target;
|
||||
const url = '/admin/manageUser';
|
||||
const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
|
||||
const data = {userId: target.dataset.userId, type: target.dataset.type, token: token};
|
||||
|
||||
target.classList.add('is-loading');
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: url,
|
||||
data: data,
|
||||
scope: me,
|
||||
target: target,
|
||||
success: me.onSuccess,
|
||||
error: handleAjaxError,
|
||||
dataType: 'json'
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
onSuccessCount(data) {
|
||||
const span = document.querySelector('span.reviewed-users-tile');
|
||||
span.textContent = data.total;
|
||||
}
|
||||
|
||||
setMenuCount() {
|
||||
const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: '/admin/loadReviewQueueCount',
|
||||
data: {token: token},
|
||||
success: this.onSuccessCount,
|
||||
error: handleAjaxError,
|
||||
});
|
||||
}
|
||||
|
||||
onSuccess() {
|
||||
const me = this.scope;
|
||||
|
||||
const target = this.target;
|
||||
const type = target.dataset.type;
|
||||
const buttonType = target.dataset.buttonType;
|
||||
const accountId = target.dataset.userId;
|
||||
const tableRow = target.closest('tr');
|
||||
|
||||
target.classList.remove('is-loading');
|
||||
|
||||
const twoButtonsContainer = target.closest('.legitfraud');
|
||||
if (twoButtonsContainer && !twoButtonsContainer.hasAttribute('counterUpdated')) {
|
||||
twoButtonsContainer.setAttribute('counterUpdated', 0);
|
||||
}
|
||||
|
||||
if ('fraudButton' === buttonType) {
|
||||
const td = target.closest('td');
|
||||
const fraudButton = td.querySelector('[data-type="fraud"]');
|
||||
const legitButton = td.querySelector('[data-type="legit"]');
|
||||
|
||||
if ('fraud' === type) {
|
||||
fraudButton.classList.replace('is-neutral', 'is-highlighted');
|
||||
fraudButton.setAttribute('disabled', '');
|
||||
|
||||
legitButton.classList.replace('is-highlighted', 'is-neutral');
|
||||
legitButton.removeAttribute('disabled');
|
||||
} else {
|
||||
legitButton.classList.replace('is-neutral', 'is-highlighted');
|
||||
legitButton.setAttribute('disabled', '');
|
||||
|
||||
fraudButton.classList.replace('is-highlighted', 'is-neutral');
|
||||
fraudButton.removeAttribute('disabled');
|
||||
}
|
||||
|
||||
const counterUpdated = twoButtonsContainer.getAttribute('counterUpdated');
|
||||
const wasCounterUpdated = parseInt(counterUpdated, 10);
|
||||
if (!wasCounterUpdated) {
|
||||
const card = target.closest('.card');
|
||||
const span = card.querySelector('.card-header-title span');
|
||||
let total = parseInt(span.innerHTML, 10);
|
||||
|
||||
if (total > 0) {
|
||||
total -= 1;
|
||||
}
|
||||
|
||||
span.textContent = total;
|
||||
|
||||
twoButtonsContainer.setAttribute('counterUpdated', 1);
|
||||
}
|
||||
|
||||
if (tableRow) {
|
||||
const dataTable = $(`#${me.tableId}`).DataTable();
|
||||
dataTable.row(tableRow).remove().draw(false);
|
||||
me.setMenuCount();
|
||||
}
|
||||
}
|
||||
|
||||
if ('reviewedButton' === buttonType) {
|
||||
//Get HTML w/ new fraud&legit buttons
|
||||
const record = {reviewed: true, accountid: accountId};
|
||||
const html = renderUserActionButtons(record);
|
||||
|
||||
const td = target.closest('td');
|
||||
td.replaceChildren(html);
|
||||
|
||||
//Add event listener to newly created buttons
|
||||
const buttons = td.querySelectorAll('button');
|
||||
const onButtonClick = me.onButtonClick.bind(me);
|
||||
buttons.forEach(button => button.addEventListener('click', onButtonClick, false));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user