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,142 @@
 | 
			
		||||
import {
 | 
			
		||||
    renderUserActionButtons,
 | 
			
		||||
    renderUserReviewedStatus,
 | 
			
		||||
} from './DataRenderers.js?v=2';
 | 
			
		||||
import {handleAjaxError} from './utils/ErrorHandler.js?v=2';
 | 
			
		||||
import {replaceAll} from './utils/String.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class SingleReviewButton {
 | 
			
		||||
 | 
			
		||||
    constructor(userId) {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
 | 
			
		||||
        const me = this;
 | 
			
		||||
        const onButtonClick = this.onButtonClick.bind(this);
 | 
			
		||||
 | 
			
		||||
        if (me.legitFraudButtonsBlock) {
 | 
			
		||||
            //Get HTML w/ new fraud&legit buttons
 | 
			
		||||
            let fraud = null;
 | 
			
		||||
            if ('true'  == me.legitFraudButtonsBlock.dataset.userFraud) fraud = true;
 | 
			
		||||
            if ('false' == me.legitFraudButtonsBlock.dataset.userFraud) fraud = false;
 | 
			
		||||
 | 
			
		||||
            const record = {reviewed: true, accountid: me.userId, fraud: fraud};
 | 
			
		||||
 | 
			
		||||
            me.legitFraudButtonsBlock.replaceChildren(renderUserActionButtons(record, false));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (me.reviewedButton) {
 | 
			
		||||
            this.reviewedButton.addEventListener('click', onButtonClick, false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (me.legitButton) {
 | 
			
		||||
            this.legitButton.addEventListener('click', onButtonClick, false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (me.fraudButton) {
 | 
			
		||||
            this.fraudButton.addEventListener('click', onButtonClick, false);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onButtonClick(e) {
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
 | 
			
		||||
        const me = this;
 | 
			
		||||
        const target = e.target;
 | 
			
		||||
        const url = '/admin/manageUser';
 | 
			
		||||
        const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
 | 
			
		||||
        const data = {userId: this.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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onSuccess() {
 | 
			
		||||
        const me   = this.scope;
 | 
			
		||||
 | 
			
		||||
        const target = this.target;
 | 
			
		||||
        const type   = target.dataset.type;
 | 
			
		||||
 | 
			
		||||
        target.classList.remove('is-loading');
 | 
			
		||||
 | 
			
		||||
        if ('reviewed-button' === target.id) {
 | 
			
		||||
            //Get HTML w/ new fraud&legit buttons
 | 
			
		||||
            const record = {reviewed: true, accountid: me.userId};
 | 
			
		||||
 | 
			
		||||
            const div = target.closest('div.head-button');
 | 
			
		||||
            div.replaceChildren(renderUserActionButtons(record, false));
 | 
			
		||||
 | 
			
		||||
            const onButtonClick = me.onButtonClick.bind(me);
 | 
			
		||||
 | 
			
		||||
            if (me.legitButton) {
 | 
			
		||||
                me.legitButton.addEventListener('click', onButtonClick, false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (me.fraudButton) {
 | 
			
		||||
                me.fraudButton.addEventListener('click', onButtonClick, false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const buttonType = target.dataset.buttonType;
 | 
			
		||||
        if ('fraudButton' === buttonType) {
 | 
			
		||||
            let reviewStatus = '';
 | 
			
		||||
            if ('fraud' === type) {
 | 
			
		||||
                reviewStatus = 'Blacklisted';
 | 
			
		||||
                me.fraudButton.classList.replace('is-neutral', 'is-highlighted');
 | 
			
		||||
                me.fraudButton.setAttribute('disabled', '');
 | 
			
		||||
 | 
			
		||||
                me.legitButton.classList.replace('is-highlighted', 'is-neutral');
 | 
			
		||||
                me.legitButton.removeAttribute('disabled');
 | 
			
		||||
            } else {
 | 
			
		||||
                reviewStatus = 'Whitelisted';
 | 
			
		||||
                me.legitButton.classList.replace('is-neutral', 'is-highlighted');
 | 
			
		||||
                me.legitButton.setAttribute('disabled', '');
 | 
			
		||||
 | 
			
		||||
                me.fraudButton.classList.replace('is-highlighted', 'is-neutral');
 | 
			
		||||
                me.fraudButton.removeAttribute('disabled');
 | 
			
		||||
            }
 | 
			
		||||
            const tile = document.querySelector('#user-id-tile');
 | 
			
		||||
            const title = tile.querySelector('#review-status span').title;
 | 
			
		||||
 | 
			
		||||
            const record = {
 | 
			
		||||
                fraud:              (reviewStatus === 'Blacklisted'),
 | 
			
		||||
                latest_decision:    title,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            tile.querySelector('#review-status').replaceChildren(renderUserReviewedStatus(record));
 | 
			
		||||
 | 
			
		||||
            const userTitleSpan = document.querySelector('h1 span');
 | 
			
		||||
 | 
			
		||||
            userTitleSpan.textContent = (reviewStatus === 'Blacklisted') ? 'X' : 'OK';
 | 
			
		||||
            userTitleSpan.classList.remove('high', 'medium', 'low', 'empty');
 | 
			
		||||
            userTitleSpan.classList.add((reviewStatus === 'Blacklisted') ? 'low' : 'high');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get legitFraudButtonsBlock() {
 | 
			
		||||
        return document.getElementById('legit-fraud-buttons-block');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get fraudButton() {
 | 
			
		||||
        return document.querySelector('[data-type="fraud"]');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get legitButton() {
 | 
			
		||||
        return document.querySelector('[data-type="legit"]');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get reviewedButton() {
 | 
			
		||||
        return document.getElementById('reviewed-button');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user