mirror of
https://github.com/Dvorinka/PPve.git
synced 2026-06-05 04:52:58 +00:00
test
This commit is contained in:
@@ -2284,6 +2284,10 @@ function setupFileInput() {
|
|||||||
// Reset form when modal is closed
|
// Reset form when modal is closed
|
||||||
// Initialize icon picker when the modal is shown
|
// Initialize icon picker when the modal is shown
|
||||||
document.getElementById('appModal').addEventListener('show.bs.modal', function () {
|
document.getElementById('appModal').addEventListener('show.bs.modal', function () {
|
||||||
|
// Initialize file input
|
||||||
|
setupFileInput();
|
||||||
|
|
||||||
|
// Initialize icon picker
|
||||||
initIconPicker();
|
initIconPicker();
|
||||||
|
|
||||||
// Set focus to search input when dropdown is shown
|
// Set focus to search input when dropdown is shown
|
||||||
@@ -2601,6 +2605,57 @@ async function deleteApp(appId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save app function
|
||||||
|
async function saveApp(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
// Get form data
|
||||||
|
const formData = new FormData(document.getElementById('appForm'));
|
||||||
|
|
||||||
|
// Add icon class to form data
|
||||||
|
const iconClass = document.getElementById('appIcon').value;
|
||||||
|
if (iconClass) {
|
||||||
|
formData.append('iconClass', iconClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add icon file if selected
|
||||||
|
const iconFile = document.getElementById('customIconInput').files[0];
|
||||||
|
if (iconFile) {
|
||||||
|
formData.append('icon', iconFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get app ID
|
||||||
|
const appId = document.getElementById('appId').value;
|
||||||
|
|
||||||
|
// Create request URL
|
||||||
|
const url = appId ? `/api/apps/${appId}` : '/api/apps';
|
||||||
|
|
||||||
|
// Set request method
|
||||||
|
const method = appId ? 'PUT' : 'POST';
|
||||||
|
|
||||||
|
// Send request
|
||||||
|
fetch(url, {
|
||||||
|
method: method,
|
||||||
|
body: formData,
|
||||||
|
credentials: 'include'
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('Network response was not ok');
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
showNotification('Aplikace byla úspěšně uložena', 'success');
|
||||||
|
loadApps();
|
||||||
|
closeAppModal();
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Error:', error);
|
||||||
|
showNotification('Chyba při ukládání aplikace', 'error');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Logout functionality
|
// Logout functionality
|
||||||
document.getElementById('logoutBtn').addEventListener('click', function() {
|
document.getElementById('logoutBtn').addEventListener('click', function() {
|
||||||
localStorage.removeItem('token');
|
localStorage.removeItem('token');
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ type App struct {
|
|||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
Description string `json:"description,omitempty"`
|
Description string `json:"description,omitempty"`
|
||||||
Icon string `json:"icon,omitempty"`
|
Icon string `json:"icon,omitempty"` // For file uploads
|
||||||
|
IconClass string `json:"iconClass,omitempty"` // For Font Awesome icons
|
||||||
CreatedAt string `json:"created_at"`
|
CreatedAt string `json:"created_at"`
|
||||||
UpdatedAt string `json:"updated_at"`
|
UpdatedAt string `json:"updated_at"`
|
||||||
}
|
}
|
||||||
@@ -459,6 +460,9 @@ func CreateAppHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get icon class if provided
|
||||||
|
iconClass := r.FormValue("iconClass")
|
||||||
|
|
||||||
// Create a new app
|
// Create a new app
|
||||||
app := App{
|
app := App{
|
||||||
ID: fmt.Sprintf("%d", time.Now().UnixNano()),
|
ID: fmt.Sprintf("%d", time.Now().UnixNano()),
|
||||||
@@ -466,6 +470,7 @@ func CreateAppHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
URL: strings.TrimSpace(url),
|
URL: strings.TrimSpace(url),
|
||||||
Description: strings.TrimSpace(description),
|
Description: strings.TrimSpace(description),
|
||||||
Icon: iconPath,
|
Icon: iconPath,
|
||||||
|
IconClass: iconClass,
|
||||||
CreatedAt: time.Now().Format(time.RFC3339),
|
CreatedAt: time.Now().Format(time.RFC3339),
|
||||||
UpdatedAt: time.Now().Format(time.RFC3339),
|
UpdatedAt: time.Now().Format(time.RFC3339),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user