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,191 @@
 | 
			
		||||
import {TotalTile} from './TotalTile.js?v=2';
 | 
			
		||||
import {getQueryParams} from './utils/DataSource.js?v=2';
 | 
			
		||||
import {handleAjaxError} from './utils/ErrorHandler.js?v=2';
 | 
			
		||||
import {fireEvent} from './utils/Event.js?v=2';
 | 
			
		||||
 | 
			
		||||
export class Map {
 | 
			
		||||
 | 
			
		||||
    constructor(mapParams) {
 | 
			
		||||
        this.config = mapParams;
 | 
			
		||||
 | 
			
		||||
        this.totalTile = new TotalTile();
 | 
			
		||||
 | 
			
		||||
        this.regions = {};
 | 
			
		||||
 | 
			
		||||
        const onRegionTipShow = this.onRegionTipShow.bind(this);
 | 
			
		||||
        const onRegionClick = this.onRegionClick.bind(this);
 | 
			
		||||
 | 
			
		||||
        $('#world-map-markers').vectorMap({
 | 
			
		||||
            map: 'world_mill_en',
 | 
			
		||||
 | 
			
		||||
            normalizeFunction: 'polynomial',
 | 
			
		||||
            hoverOpacity: 0.7,
 | 
			
		||||
            regionsSelectable: false,
 | 
			
		||||
            markersSelectable: false,
 | 
			
		||||
            zoomOnScroll: false,
 | 
			
		||||
            hoverColor: false,
 | 
			
		||||
 | 
			
		||||
            series: {
 | 
			
		||||
                regions: [
 | 
			
		||||
                    {
 | 
			
		||||
                        values: {},
 | 
			
		||||
                        scale: ['#4e6964', '#01EE99'],
 | 
			
		||||
                        normalizeFunction: 'polynomial'
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            regionStyle: {
 | 
			
		||||
                initial: {
 | 
			
		||||
                    fill: '#575678'
 | 
			
		||||
                },
 | 
			
		||||
                selected: {
 | 
			
		||||
                    fill: '#01EE99'
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            onRegionTipShow: function(e, el, code) {
 | 
			
		||||
                onRegionTipShow(el, code);
 | 
			
		||||
            },
 | 
			
		||||
            onRegionClick: function(e, code) {
 | 
			
		||||
                onRegionClick(code);
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            backgroundColor: '#131220'
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        const onDateFilterChanged = this.onDateFilterChanged.bind(this);
 | 
			
		||||
        window.addEventListener('dateFilterChanged', onDateFilterChanged, false);
 | 
			
		||||
 | 
			
		||||
        if (!this.config.sequential) {
 | 
			
		||||
            this.loadData();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    startLoader() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onRegionTipShow(tipEl, value) {
 | 
			
		||||
        const regionValue = this.mapObject.series.regions[0].values[value];
 | 
			
		||||
        const phrase      = this.getTooltipString(regionValue);
 | 
			
		||||
 | 
			
		||||
        tipEl.html(`${tipEl.html()} - ${phrase}`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onRegionClick(value) {
 | 
			
		||||
        if (this.regions[value] !== undefined && this.regions[value][this.config.tooltipField] > 0) {
 | 
			
		||||
            const url = `/country/${this.regions[value].id}`;
 | 
			
		||||
            if (event.ctrlKey || event.metaKey) {
 | 
			
		||||
                window.open(url, '_blank');
 | 
			
		||||
            } else {
 | 
			
		||||
                window.location.href = url;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getCountriesRegionsFromResponse(records) {
 | 
			
		||||
        const me = this;
 | 
			
		||||
        const regions = {};
 | 
			
		||||
 | 
			
		||||
        this.regions = {};
 | 
			
		||||
 | 
			
		||||
        records.forEach(rec => {
 | 
			
		||||
            const country = rec.iso;
 | 
			
		||||
            if (!regions[country]) {
 | 
			
		||||
                regions[country] = 0;
 | 
			
		||||
                this.regions[country] = 0;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            const value = me.getRegionValue(rec);
 | 
			
		||||
            regions[country] = value;
 | 
			
		||||
            this.regions[country] = {
 | 
			
		||||
                [this.config.tooltipField]: value,
 | 
			
		||||
                id: rec.id,
 | 
			
		||||
            };
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return regions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getRegionValue(record) {
 | 
			
		||||
        const field = this.config.tooltipField;
 | 
			
		||||
        const value = record[field];
 | 
			
		||||
 | 
			
		||||
        return value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    selectRegions(regions) {
 | 
			
		||||
        const map  = this.mapObject;
 | 
			
		||||
 | 
			
		||||
        //Remove countries which does not exist in the vectormap: MU, BH, etc...
 | 
			
		||||
        for (const [key, value] of Object.entries(regions)) {
 | 
			
		||||
            if (!map.regions.hasOwnProperty(key)) {
 | 
			
		||||
                delete regions[key];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //https://github.com/bjornd/jvectormap/issues/376
 | 
			
		||||
        map.series.regions[0].params.min = undefined;
 | 
			
		||||
        map.series.regions[0].params.max = undefined;
 | 
			
		||||
 | 
			
		||||
        map.series.regions[0].clear();
 | 
			
		||||
        map.series.regions[0].setValues(regions);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onDateFilterChanged() {
 | 
			
		||||
        this.loadData();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    loadData() {
 | 
			
		||||
        const me     = this;
 | 
			
		||||
        const params = this.config.getParams();
 | 
			
		||||
        const token  = document.head.querySelector('[name=\'csrf-token\'][content]').content;
 | 
			
		||||
 | 
			
		||||
        const data = getQueryParams(params);
 | 
			
		||||
 | 
			
		||||
        fireEvent('dateFilterChangedCaught');
 | 
			
		||||
 | 
			
		||||
        $.ajax({
 | 
			
		||||
            type: 'get',
 | 
			
		||||
            url: `/admin/loadMap?token=${token}`,
 | 
			
		||||
            data: data,
 | 
			
		||||
            scope: me,
 | 
			
		||||
            success: me.onCountriesListLoaded,
 | 
			
		||||
            error: handleAjaxError,
 | 
			
		||||
            complete: function() {
 | 
			
		||||
                fireEvent('dateFilterChangedCompleted');
 | 
			
		||||
            },
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    onCountriesListLoaded(data, status) {
 | 
			
		||||
        if ('success' == status) {
 | 
			
		||||
            const me = this.scope;
 | 
			
		||||
 | 
			
		||||
            const tableId = 'countries-table';
 | 
			
		||||
 | 
			
		||||
            me.totalTile.update(tableId, me.config.tileId, data.length);
 | 
			
		||||
 | 
			
		||||
            const regions = me.getCountriesRegionsFromResponse(data);
 | 
			
		||||
 | 
			
		||||
            me.selectRegions(regions);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getTooltipString(value) {
 | 
			
		||||
        value = value ? value : 0;
 | 
			
		||||
 | 
			
		||||
        let string = this.config.tooltipString;
 | 
			
		||||
        if (1 !== value) {
 | 
			
		||||
            string += 's';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const tooltipPhrase = `${value} ${string}`;
 | 
			
		||||
 | 
			
		||||
        return tooltipPhrase;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get mapObject() {
 | 
			
		||||
        return $('#world-map-markers').vectorMap('get', 'mapObject');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user