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,120 @@
import {Loader} from './Loader.js?v=2';
import {Tooltip} from './Tooltip.js?v=2';
import {handleAjaxError} from './utils/ErrorHandler.js?v=2';
import {padZero} from './utils/Date.js?v=2';
export class SearchLine {
constructor() {
this.loader = new Loader();
Tooltip.addTooltipsToClock();
const me = this;
const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
const url = `/admin/search?token=${token}`;
$('#auto-complete').autocomplete({
serviceUrl: url,
deferRequestBy: 300,
minChars: 3,
groupBy: 'category',
showNoSuggestionNotice: true,
noSuggestionNotice: 'Sorry, no matching results',
onSelect: function(suggestion) {
window.open(`/${suggestion.entityId}/${suggestion.id}`, '_self');
},
onSearchStart: function(params) {
params.query = params.query.trim();
me.loaderDiv.classList.remove('is-hidden');
me.loader.start(me.loaderDiv);
},
onSearchComplete: function(query, suggestions) {
me.loader.stop();
me.loaderDiv.classList.add('is-hidden');
},
onSearchError: handleAjaxError,
});
setInterval(this.updateTime.bind(this), 1000);
}
updateTime() {
let [time, tz] = this.timeInput.placeholder.split(' ');
let [h, m, s] = time.split(':').map(x => parseInt(x, 10));
let d = this.dayInput.placeholder;
s += 1;
if (s >= 60) {
s = 0;
m += 1;
}
if (m >= 60) {
m = 0;
h += 1;
}
if (h >= 24) {
h = 0;
d = parseInt(d, 10) + 1;
if (d >= 366) {
const now = new Date();
const year = now.getFullYear() - (now.getMonth() === 0 ? 1 : 0);
const isLeap = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
if (d > 366 || (d === 366 && !isLeap)) {
d = 0;
}
}
this.dayInput.placeholder = (d < 10 ? '00' : (d < 100 ? '0' : '')) + d.toString();
}
h = padZero(h);
m = padZero(m);
s = padZero(s);
this.timeInput.placeholder = `${h}:${m}:${s} ${tz}`;
}
onTypeLinkClick(e) {
e.preventDefault();
this.queryTypeLinks.forEach(link => link.classList.remove('active'));
e.target.classList.add('active');
return false;
}
getActiveQueryTypeItem() {
const activeLink = this.queryTypeControl.querySelector('a.active');
const activeType = activeLink.dataset.value;
return activeType;
}
get loaderDiv() {
return document.querySelector('.searchline').querySelector('div.text-loader');
}
get timeInput() {
return document.getElementById('clock-time');
}
get dayInput() {
return document.getElementById('clock-day');
}
get queryTypeLinks() {
return this.queryTypeControl.querySelectorAll('A');
}
get queryTypeControl() {
return document.querySelector('nav.filtersForm.search');
}
}