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:
2025-10-30 11:43:06 -05:00
parent 0ce353ea9d
commit 91d52d2de5
1692 changed files with 202851 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
import {Loader} from './Loader.js?v=2';
import {handleAjaxError} from './utils/ErrorHandler.js?v=2';
import {fireEvent} from './utils/Event.js?v=2';
export class DashboardTile {
constructor(tilesParams) {
const me = this;
this.config = tilesParams;
this.loader = new Loader();
if (!this.config.sequential) {
const onDateFilterChanged = this.onDateFilterChanged.bind(this);
window.addEventListener('dateFilterChanged', onDateFilterChanged, false);
this.initLoad();
}
}
startLoader() {
const el = document.querySelector(`.${this.config.mode} .title`);
this.loader.start(el);
}
loadData() {
const me = this;
const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
let params = this.config.getParams().dateRange;
params.mode = this.config.mode;
if (!this.config.sequential) {
this.startLoader();
}
fireEvent('dateFilterChangedCaught');
$.ajax({
url: `/admin/loadDashboardStat?token=${token}`,
type: 'get',
scope: me,
data: params,
success: me.onLoad,
error: handleAjaxError,
complete: function() {
fireEvent('dateFilterChangedCompleted');
},
});
}
onLoad(data, status) {
if ('success' == status) {
this.scope.loader.stop();
const frag = document.createDocumentFragment();
const period = document.createElement('p');
if (this.scope.config.mode === 'totalUsersForReview') {
period.className = 'periodTotalYellow';
} else if (this.scope.config.mode === 'totalBlockedUsers') {
period.className = 'periodTotalRed';
} else {
period.className = 'periodTotal';
}
period.textContent = data.total;
const total = document.createElement('p');
total.className = 'allTimeTotal';
total.textContent = data.allTimeTotal;
frag.appendChild(period);
frag.appendChild(total);
const el = document.querySelector(`.${this.scope.config.mode} .title`);
el.replaceChildren(frag);
}
}
onDateFilterChanged() {
this.loadData();
}
}