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,206 @@
 | 
			
		||||
import {Loader} from '../Loader.js?v=2';
 | 
			
		||||
import {Tooltip} from '../Tooltip.js?v=2';
 | 
			
		||||
import {fireEvent} from '../utils/Event.js?v=2';
 | 
			
		||||
import {handleAjaxError} from '../utils/ErrorHandler.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class BasePanel {
 | 
			
		||||
 | 
			
		||||
    constructor(eventParams) {
 | 
			
		||||
        this.enrichment = eventParams.enrichment;
 | 
			
		||||
        this.type = eventParams.type;
 | 
			
		||||
        this.url = eventParams.url;
 | 
			
		||||
        this.cardId = eventParams.cardId;
 | 
			
		||||
        this.panelClosed = eventParams.panelClosed;
 | 
			
		||||
        this.closePanel = eventParams.closePanel;
 | 
			
		||||
        this.rowClicked = eventParams.rowClicked;
 | 
			
		||||
 | 
			
		||||
        this.loader = new Loader();
 | 
			
		||||
 | 
			
		||||
        this.itemId = null;
 | 
			
		||||
 | 
			
		||||
        const onCloseDetailsPanel = this.onCloseDetailsPanel.bind(this);
 | 
			
		||||
        window.addEventListener(this.closePanel, onCloseDetailsPanel, false);
 | 
			
		||||
 | 
			
		||||
        const onTableRowClicked = this.onTableRowClicked.bind(this);
 | 
			
		||||
        window.addEventListener(this.rowClicked, onTableRowClicked, false);
 | 
			
		||||
 | 
			
		||||
        const onKeydown = this.onKeydown.bind(this);
 | 
			
		||||
        window.addEventListener('keydown', onKeydown, false);
 | 
			
		||||
 | 
			
		||||
        const onCloseButtonClick = this.onCloseButtonClick.bind(this);
 | 
			
		||||
        this.closeButton.addEventListener('click', onCloseButtonClick, false);
 | 
			
		||||
 | 
			
		||||
        if (this.enrichment) {
 | 
			
		||||
            const onEnrichmentButtonClick = this.onEnrichmentButtonClick.bind(this);
 | 
			
		||||
            this.reenrichmentButton.addEventListener('click', onEnrichmentButtonClick, false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.allPanels = {
 | 
			
		||||
            'event':    {id: 'event-card',  closeEvent: 'eventPanelClosed'},
 | 
			
		||||
            'logbook':  {id: 'logbook-card',closeEvent: 'logbookPanelClosed'},
 | 
			
		||||
            'email':    {id: 'email-card',  closeEvent: 'emailPanelClosed'},
 | 
			
		||||
            'device':   {id: 'device-card', closeEvent: 'devicePanelClosed'},
 | 
			
		||||
            'phone':    {id: 'phone-card',  closeEvent: 'phonePanelClosed'},
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
 | 
			
		||||
    onKeydown(e) {
 | 
			
		||||
        // procced keydown even if event was processed
 | 
			
		||||
 | 
			
		||||
        switch (e.key) {
 | 
			
		||||
            case 'Esc': // IE/Edge specific value
 | 
			
		||||
            case 'Escape': {
 | 
			
		||||
                this.close();
 | 
			
		||||
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            default: {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Cancel the default action to avoid it being handled twice
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onEnrichmentButtonClick(e) {
 | 
			
		||||
        this.contentDiv.classList.add('is-hidden');
 | 
			
		||||
        this.loaderDiv.classList.remove('is-hidden');
 | 
			
		||||
        this.card.classList.remove('is-hidden');
 | 
			
		||||
 | 
			
		||||
        const el = this.loaderDiv;
 | 
			
		||||
        this.loader.start(el);
 | 
			
		||||
 | 
			
		||||
        this.reenrichmentButton.setAttribute('disabled', '');
 | 
			
		||||
        this.reenrichmentButton.classList.add('is-hidden');
 | 
			
		||||
 | 
			
		||||
        const onEnrichmentLoaded = this.onEnrichmentLoaded.bind(this);
 | 
			
		||||
        const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
 | 
			
		||||
 | 
			
		||||
        $.ajax({
 | 
			
		||||
            url: '/admin/reenrichment',
 | 
			
		||||
            type: 'post',
 | 
			
		||||
            data: {type: this.type, entityId: this.itemId, token: token},
 | 
			
		||||
            success: onEnrichmentLoaded,
 | 
			
		||||
            error: handleAjaxError,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onEnrichmentLoaded(data, status) {
 | 
			
		||||
        if ('success' !== status || 0 === data.length) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.loadData(this.itemId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onCloseButtonClick(e) {
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
        this.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onCloseDetailsPanel() {
 | 
			
		||||
        this.close();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    loadData(id) {
 | 
			
		||||
        this.contentDiv.classList.add('is-hidden');
 | 
			
		||||
        this.loaderDiv.classList.remove('is-hidden');
 | 
			
		||||
        this.card.classList.remove('is-hidden');
 | 
			
		||||
 | 
			
		||||
        const el = this.loaderDiv;
 | 
			
		||||
        this.loader.start(el);
 | 
			
		||||
 | 
			
		||||
        const onDetailsLoaded = this.onDetailsLoaded.bind(this);
 | 
			
		||||
        const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
 | 
			
		||||
 | 
			
		||||
        $.ajax({
 | 
			
		||||
            url: this.url,
 | 
			
		||||
            type: 'get',
 | 
			
		||||
            data: {id: id, token: token},
 | 
			
		||||
            success: onDetailsLoaded,
 | 
			
		||||
            error: handleAjaxError,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onTableRowClicked({detail}) {
 | 
			
		||||
        this.itemId = detail.itemId;
 | 
			
		||||
        this.loadData(this.itemId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onDetailsLoaded(data, status) {
 | 
			
		||||
 | 
			
		||||
        if ('success' !== status || 0 === data.length) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data = this.proceedData(data);
 | 
			
		||||
 | 
			
		||||
        if (this.enrichment && data.hasOwnProperty('checked') && this.reenrichmentButton) {
 | 
			
		||||
            if (data.checked === false && data.enrichable) {
 | 
			
		||||
                this.reenrichmentButton.removeAttribute('disabled');
 | 
			
		||||
                this.reenrichmentButton.classList.remove('is-hidden');
 | 
			
		||||
            } else {
 | 
			
		||||
                this.reenrichmentButton.setAttribute('disabled', '');
 | 
			
		||||
                this.reenrichmentButton.classList.add('is-hidden');
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.loader.stop();
 | 
			
		||||
        this.contentDiv.classList.remove('is-hidden');
 | 
			
		||||
        this.loaderDiv.classList.add('is-hidden');
 | 
			
		||||
 | 
			
		||||
        let span = null;
 | 
			
		||||
        //todo: foreach and arrow fn ?
 | 
			
		||||
        for (const key in data) {
 | 
			
		||||
            span = this.card.querySelector(`#details_${key}`);
 | 
			
		||||
            if (span) {
 | 
			
		||||
                if (data[key] instanceof Node) {
 | 
			
		||||
                    span.replaceChildren(data[key]);
 | 
			
		||||
                } else {
 | 
			
		||||
                    span.innerHTML = data[key];
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.initTooltips();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    initTooltips() {
 | 
			
		||||
        Tooltip.addTooltipsToEventDetailsPanel();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    proceedData(data) {
 | 
			
		||||
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    close() {
 | 
			
		||||
        fireEvent(this.panelClosed);
 | 
			
		||||
        this.card.classList.add('is-hidden');
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get loaderDiv() {
 | 
			
		||||
        return this.card.querySelector('div.text-loader');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get contentDiv() {
 | 
			
		||||
        return this.card.querySelector('div.content');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get card() {
 | 
			
		||||
        return document.querySelector(`.details-card#${this.cardId}`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get closeButton() {
 | 
			
		||||
        return this.card.querySelector('.delete');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get reenrichmentButton() {
 | 
			
		||||
        return this.card.querySelector('.reenrichment-button');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user