- 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.
		
			
				
	
	
		
			143 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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');
 | 
						|
    }
 | 
						|
}
 |