Initial commit: CloudOps infrastructure platform

This commit is contained in:
root
2026-04-09 19:58:57 +02:00
commit 1166a52f26
7762 changed files with 839452 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
class ProjectSelectBox {
constructor(selectElement) {
this.$projectSelect = mQuery(selectElement);
this.init();
}
init() {
this.$projectSelect.on('chosen:no_results', this.attachKeydownListener.bind(this));
}
attachKeydownListener(event) {
const $input = mQuery(event.target).next('.chosen-container').find('.chosen-search-input');
$input.off('keydown').on('keydown', (e) => {
if (e.key === 'Enter') {
e.preventDefault();
const newValue = $input.val().trim();
if (newValue) {
// Add the new value to the select element as an option
const $newOption = mQuery('<option>').val('project_to_create').text(newValue).prop('selected', true);
this.$projectSelect.append($newOption).trigger('chosen:updated');
this.createProjects(event.target);
}
}
});
}
createProjects(el) {
const newProjectNames = [];
const existingProjectIds = [];
const $projectSelect = mQuery(el);
mQuery('#' + $projectSelect.attr('id') + ' :selected').each(function(i, selected) {
const $option = mQuery(selected);
const selectedId = $option.val();
if ('project_to_create' === selectedId) {
newProjectNames.push($option.text());
} else {
existingProjectIds.push(selectedId);
}
});
if (!newProjectNames.length) {
return;
}
Mautic.activateLabelLoadingIndicator($projectSelect.attr('id'));
Mautic.ajaxActionRequest('project:addProjects', {newProjectNames: JSON.stringify(newProjectNames), existingProjectIds: JSON.stringify(existingProjectIds)}, function(response) {
if (response.projects) {
mQuery('#' + $projectSelect.attr('id')).html(response.projects).trigger('chosen:updated');
}
Mautic.removeLabelLoadingIndicator();
});
}
}
// Listen for the 'chosen:no_results' event on all select elements
mQuery(document).on('chosen:no_results', 'select', function (event) {
const $select = mQuery(event.target);
// Check if the select element has the desired attribute
if ($select.data('action') === 'createProject') {
new ProjectSelectBox($select);
}
});
// Handle entity selection modal opening for project details
mQuery(document).on('change', '#project-entity-selector, #entity-type-selector', function(event) {
const $select = mQuery(this);
const $selectedOption = $select.find('option:selected');
if ($selectedOption.val() && $selectedOption.data('href')) {
// Get the URL and header from data attributes
const url = $selectedOption.data('href');
const header = $selectedOption.data('header');
// Use Mautic's loadAjaxModal function
Mautic.loadAjaxModal('#MauticSharedModal', url, 'GET', header);
// Reset the select to placeholder after opening modal
$select.val('');
// Update chosen if it's a chosen select
if ($select.hasClass('chosen-select')) {
$select.trigger('chosen:updated');
}
}
});