Switch Emojis to Tabler icons.

This commit is contained in:
2025-07-08 22:35:31 +02:00
parent f2773a674a
commit 9dd208800d
44 changed files with 389 additions and 366 deletions

View File

@@ -367,7 +367,8 @@ body.auth-page::after {
}
.company-code-group::before {
content: '🏢';
content: '\eebe'; /* Tabler icon building */
font-family: 'tabler-icons';
position: absolute;
left: 1rem;
top: 2.5rem; /* Position below the label */

View File

@@ -242,7 +242,7 @@ button {
.nav-icon {
margin-right: 0.75rem;
font-size: 1.1rem;
font-size: 1.5rem;
min-width: 20px;
text-align: center;
}

View File

@@ -103,7 +103,7 @@ document.addEventListener('DOMContentLoaded', function() {
const toggleBtn = document.createElement('button');
toggleBtn.type = 'button';
toggleBtn.className = 'password-toggle';
toggleBtn.innerHTML = '👁️';
toggleBtn.innerHTML = '<i class="ti ti-eye"></i>';
toggleBtn.style.cssText = `
position: absolute;
right: 1rem;
@@ -120,10 +120,10 @@ document.addEventListener('DOMContentLoaded', function() {
toggleBtn.addEventListener('click', function() {
if (input.type === 'password') {
input.type = 'text';
this.innerHTML = '🙈';
this.innerHTML = '<i class="ti ti-eye-off"></i>';
} else {
input.type = 'password';
this.innerHTML = '👁️';
this.innerHTML = '<i class="ti ti-eye"></i>';
}
});

View File

@@ -148,10 +148,10 @@ document.addEventListener('DOMContentLoaded', function() {
matchIndicator.textContent = '';
matchIndicator.className = 'password-match-indicator';
} else if (password === confirmInput.value) {
matchIndicator.textContent = '✓ Passwords match';
matchIndicator.innerHTML = '<i class="ti ti-check"></i> Passwords match';
matchIndicator.className = 'password-match-indicator match';
} else {
matchIndicator.textContent = '✗ Passwords do not match';
matchIndicator.innerHTML = '<i class="ti ti-x"></i> Passwords do not match';
matchIndicator.className = 'password-match-indicator no-match';
}
}

View File

@@ -23,17 +23,17 @@
</div>
<div class="feature-item">
<h3>👥 Team Management</h3>
<h3><i class="ti ti-users"></i> Team Management</h3>
<p>Managers can organize users into teams, monitor team performance, and track collective working hours. Role-based access ensures appropriate permissions for different user levels.</p>
</div>
<div class="feature-item">
<h3>📊 Comprehensive Reporting</h3>
<h3><i class="ti ti-chart-bar"></i> Comprehensive Reporting</h3>
<p>View detailed time entry history, team performance metrics, and individual productivity reports. Export data for payroll and project management purposes.</p>
</div>
<div class="feature-item">
<h3>🔧 Flexible Configuration</h3>
<h3><i class="ti ti-tool"></i> Flexible Configuration</h3>
<p>Customize work hour requirements, mandatory break durations, and threshold settings to match your organization's policies and labor regulations.</p>
</div>
@@ -80,22 +80,22 @@
<div class="benefits-list">
<div class="benefit">
<h3> Compliance Ready</h3>
<h3><i class="ti ti-check"></i> Compliance Ready</h3>
<p>Automatically enforces break policies and work hour regulations to help your organization stay compliant with labor laws.</p>
</div>
<div class="benefit">
<h3> Easy to Use</h3>
<h3><i class="ti ti-check"></i> Easy to Use</h3>
<p>Intuitive interface requires minimal training. Start tracking time immediately without complicated setup procedures.</p>
</div>
<div class="benefit">
<h3> Scalable Solution</h3>
<h3><i class="ti ti-check"></i> Scalable Solution</h3>
<p>Grows with your organization from small teams to large enterprises. Multi-tenant architecture supports multiple companies, complex organizational structures, and unlimited growth potential.</p>
</div>
<div class="benefit">
<h3> Data-Driven Insights</h3>
<h3><i class="ti ti-check"></i> Data-Driven Insights</h3>
<p>Generate meaningful reports and analytics to optimize productivity, identify trends, and make informed business decisions.</p>
</div>
</div>
@@ -115,7 +115,7 @@
</div>
<div class="setup-option">
<h3>👥 Join Existing Company</h3>
<h3><i class="ti ti-users"></i> Join Existing Company</h3>
<p>Already have a company using {{ g.branding.app_name }}? Get your company code from your administrator and register to join your organization.</p>
</div>
</div>

View File

@@ -7,7 +7,7 @@
<div class="header-content">
<div class="header-left">
<h1 class="page-title">
<span class="page-icon">🏢</span>
<span class="page-icon"><i class="ti ti-building"></i></span>
Company Management
</h1>
<p class="page-subtitle">Configure your company settings and policies</p>
@@ -26,22 +26,22 @@
<div class="stat-card">
<div class="stat-value">{{ stats.total_users }}</div>
<div class="stat-label">Total Users</div>
<a href="{{ url_for('companies.company_users') }}" class="stat-link">View all </a>
<a href="{{ url_for('companies.company_users') }}" class="stat-link">View all <i class="ti ti-arrow-right"></i></a>
</div>
<div class="stat-card">
<div class="stat-value">{{ stats.total_teams }}</div>
<div class="stat-label">Teams</div>
<a href="{{ url_for('teams.admin_teams') }}" class="stat-link">Manage </a>
<a href="{{ url_for('teams.admin_teams') }}" class="stat-link">Manage <i class="ti ti-arrow-right"></i></a>
</div>
<div class="stat-card">
<div class="stat-value">{{ stats.total_projects }}</div>
<div class="stat-label">Total Projects</div>
<a href="{{ url_for('projects.admin_projects') }}" class="stat-link">View all </a>
<a href="{{ url_for('projects.admin_projects') }}" class="stat-link">View all <i class="ti ti-arrow-right"></i></a>
</div>
<div class="stat-card">
<div class="stat-value">{{ stats.active_projects }}</div>
<div class="stat-label">Active Projects</div>
<a href="{{ url_for('projects.admin_projects') }}" class="stat-link">Manage </a>
<a href="{{ url_for('projects.admin_projects') }}" class="stat-link">Manage <i class="ti ti-arrow-right"></i></a>
</div>
</div>
@@ -53,7 +53,7 @@
<div class="card">
<div class="card-header">
<h2 class="card-title">
<span class="icon"></span>
<span class="icon"><i class="ti ti-info-circle"></i></span>
Company Information
</h2>
</div>
@@ -97,13 +97,13 @@
<div class="info-panel">
<div class="info-item">
<span class="info-icon">🔑</span>
<span class="info-icon"><i class="ti ti-key"></i></span>
<div class="info-content">
<label class="info-label">Company Code</label>
<div class="code-display">
<input type="text" value="{{ company.slug }}" readonly id="companyCode" class="code-input">
<button type="button" class="btn btn-copy" onclick="copyCompanyCode()">
<span id="copyIcon">📋</span>
<span id="copyIcon"><i class="ti ti-clipboard"></i></span>
<span id="copyText">Copy</span>
</button>
</div>
@@ -111,7 +111,7 @@
</div>
</div>
<div class="info-item">
<span class="info-icon">📅</span>
<span class="info-icon"><i class="ti ti-calendar"></i></span>
<div class="info-content">
<label class="info-label">Created</label>
<span class="info-value">{{ company.created_at.strftime('%B %d, %Y at %I:%M %p') }}</span>
@@ -121,7 +121,7 @@
<div class="form-actions">
<button type="submit" class="btn btn-primary">
<span class="icon"></span>
<span class="icon"><i class="ti ti-check"></i></span>
Save Company Details
</button>
</div>
@@ -133,14 +133,14 @@
<div class="card">
<div class="card-header">
<h2 class="card-title">
<span class="icon"></span>
<span class="icon"><i class="ti ti-bolt"></i></span>
Quick Actions
</h2>
</div>
<div class="card-body">
<div class="action-grid">
<a href="{{ url_for('users.admin_users') }}" class="action-item">
<div class="action-icon">👥</div>
<div class="action-icon"><i class="ti ti-users"></i></div>
<div class="action-content">
<h3>Manage Users</h3>
<p>User accounts & permissions</p>
@@ -148,7 +148,7 @@
</a>
<a href="{{ url_for('teams.admin_teams') }}" class="action-item">
<div class="action-icon">👨‍👩‍👧‍👦</div>
<div class="action-icon"><i class="ti ti-users-group"></i></div>
<div class="action-content">
<h3>Manage Teams</h3>
<p>Organize company structure</p>
@@ -156,7 +156,7 @@
</a>
<a href="{{ url_for('projects.admin_projects') }}" class="action-item">
<div class="action-icon">📁</div>
<div class="action-icon"><i class="ti ti-folder"></i></div>
<div class="action-content">
<h3>Manage Projects</h3>
<p>Time tracking projects</p>
@@ -164,7 +164,7 @@
</a>
<a href="{{ url_for('invitations.send_invitation') }}" class="action-item">
<div class="action-icon">📨</div>
<div class="action-icon"><i class="ti ti-mail"></i></div>
<div class="action-content">
<h3>Send Invitation</h3>
<p>Invite team members</p>
@@ -181,7 +181,7 @@
<div class="card">
<div class="card-header">
<h2 class="card-title">
<span class="icon">📋</span>
<span class="icon"><i class="ti ti-clipboard-list"></i></span>
Work Policies
</h2>
</div>
@@ -251,7 +251,7 @@
<div class="form-actions">
<button type="submit" class="btn btn-primary">
<span class="icon"></span>
<span class="icon"><i class="ti ti-check"></i></span>
Update Policies
</button>
</div>
@@ -264,7 +264,7 @@
<div class="card">
<div class="card-header">
<h2 class="card-title">
<span class="icon">👤</span>
<span class="icon"><i class="ti ti-user"></i></span>
User Registration
</h2>
</div>
@@ -304,7 +304,7 @@
<div class="form-actions">
<button type="submit" class="btn btn-primary">
<span class="icon"></span>
<span class="icon"><i class="ti ti-check"></i></span>
Update Settings
</button>
</div>
@@ -728,6 +728,11 @@ input:checked + .toggle-slider:before {
flex-shrink: 0;
}
.action-icon i {
font-size: 2rem;
color: #667eea;
}
.action-content h3 {
font-size: 1.05rem;
font-weight: 600;
@@ -874,17 +879,17 @@ function copyCompanyCode() {
const copyText = document.getElementById('copyText');
// Store original values
const originalIcon = copyIcon.textContent;
const originalIcon = copyIcon.innerHTML;
const originalText = copyText.textContent;
// Update to success state
copyIcon.textContent = '✓';
copyIcon.innerHTML = '<i class="ti ti-check"></i>';
copyText.textContent = 'Copied!';
button.classList.add('success');
// Reset after 2 seconds
setTimeout(() => {
copyIcon.textContent = originalIcon;
copyIcon.innerHTML = originalIcon;
copyText.textContent = originalText;
button.classList.remove('success');
}, 2000);

View File

@@ -7,18 +7,18 @@
<div class="header-content">
<div class="header-left">
<h1 class="page-title">
<span class="page-icon">📁</span>
<i class="ti ti-folder page-icon"></i>
Project Management
</h1>
<p class="page-subtitle">Manage projects, categories, and track time entries</p>
</div>
<div class="header-actions">
<a href="{{ url_for('projects.create_project') }}" class="btn btn-primary">
<span class="icon">+</span>
<i class="ti ti-plus"></i>
Create New Project
</a>
<button id="manage-categories-btn" class="btn btn-secondary">
<span class="icon">🏷️</span>
<i class="ti ti-tag"></i>
Manage Categories
</button>
</div>
@@ -51,7 +51,7 @@
<div id="categories-section" class="categories-section" style="display: none;">
<div class="section-header">
<h2 class="section-title">
<span class="icon">🏷️</span>
<i class="ti ti-tag"></i>
Project Categories
</h2>
<button id="create-category-btn" class="btn btn-sm btn-primary">
@@ -65,7 +65,7 @@
<div class="category-card" data-category-id="{{ category.id }}">
<div class="category-header" style="background: linear-gradient(135deg, {{ category.color }}20 0%, {{ category.color }}10 100%); border-left: 4px solid {{ category.color }};">
<div class="category-title">
<span class="category-icon">{{ category.icon or '📁' }}</span>
<span class="category-icon">{{ category.icon or '<i class="ti ti-folder"></i>' }}</span>
<span class="category-name">{{ category.name }}</span>
</div>
<div class="category-stats">
@@ -76,11 +76,11 @@
<p class="category-description">{{ category.description or 'No description provided' }}</p>
<div class="category-actions">
<button class="btn btn-sm btn-edit edit-category-btn" data-id="{{ category.id }}">
<span class="icon">✏️</span>
<i class="ti ti-pencil"></i>
Edit
</button>
<button class="btn btn-sm btn-delete delete-category-btn" data-id="{{ category.id }}">
<span class="icon">🗑️</span>
<i class="ti ti-trash"></i>
Delete
</button>
</div>
@@ -88,7 +88,7 @@
</div>
{% else %}
<div class="empty-categories">
<div class="empty-icon">🏷️</div>
<div class="empty-icon"><i class="ti ti-tag" style="font-size: 4rem;"></i></div>
<p class="empty-message">No categories created yet</p>
<button id="first-category-btn" class="btn btn-primary">Create your first category</button>
</div>
@@ -102,7 +102,7 @@
<!-- View Controls -->
<div class="view-controls">
<div class="search-container">
<span class="search-icon">🔍</span>
<i class="ti ti-search search-icon"></i>
<input type="text"
class="search-input"
id="projectSearch"
@@ -110,10 +110,10 @@
</div>
<div class="view-toggle">
<button class="toggle-btn active" data-view="grid" title="Grid View">
<span class="icon"></span>
<i class="ti ti-layout-grid"></i>
</button>
<button class="toggle-btn" data-view="list" title="List View">
<span class="icon"></span>
<i class="ti ti-list"></i>
</button>
</div>
</div>
@@ -141,18 +141,18 @@
{% if project.category %}
<div class="project-category">
<span class="category-badge" style="background-color: {{ project.category.color }}20; color: {{ project.category.color }};">
{{ project.category.icon or '📁' }} {{ project.category.name }}
{{ project.category.icon or '<i class="ti ti-folder"></i>' }} {{ project.category.name }}
</span>
</div>
{% endif %}
<div class="project-info">
<div class="info-item">
<span class="info-icon">👥</span>
<i class="ti ti-users info-icon"></i>
<span class="info-text">{{ project.team.name if project.team else 'All Teams' }}</span>
</div>
<div class="info-item">
<span class="info-icon">📅</span>
<i class="ti ti-calendar info-icon"></i>
<span class="info-text">
{% if project.start_date %}
{{ project.start_date.strftime('%b %d, %Y') }}
@@ -163,11 +163,11 @@
</span>
</div>
<div class="info-item">
<span class="info-icon">⏱️</span>
<i class="ti ti-clock info-icon"></i>
<span class="info-text">{{ project.time_entries|length }} time entries</span>
</div>
<div class="info-item">
<span class="info-icon">👤</span>
<i class="ti ti-user info-icon"></i>
<span class="info-text">Created by {{ project.created_by.username }}</span>
</div>
</div>
@@ -175,18 +175,18 @@
<div class="project-actions">
<a href="{{ url_for('projects.edit_project', project_id=project.id) }}" class="btn btn-edit">
<span class="icon">✏️</span>
<i class="ti ti-pencil"></i>
Edit
</a>
<a href="{{ url_for('projects.manage_project_tasks', project_id=project.id) }}" class="btn btn-tasks">
<span class="icon">📋</span>
<i class="ti ti-clipboard-list"></i>
Tasks
</a>
{% if g.user.role in [Role.ADMIN, Role.SYSTEM_ADMIN] %}
<form method="POST" action="{{ url_for('projects.delete_project', project_id=project.id) }}" class="delete-form"
onsubmit="return confirm('Are you sure you want to delete this project? This will delete all tasks, time entries, and related data!')">
<button type="submit" class="btn btn-delete" title="Delete project">
<span class="icon">🗑️</span>
<i class="ti ti-trash"></i>
</button>
</form>
{% endif %}
@@ -226,7 +226,7 @@
<td>
{% if project.category %}
<span class="category-badge" style="background-color: {{ project.category.color }}20; color: {{ project.category.color }};">
{{ project.category.icon or '📁' }} {{ project.category.name }}
{{ project.category.icon or '<i class="ti ti-folder"></i>' }} {{ project.category.name }}
</span>
{% else %}
<span class="text-muted">-</span>
@@ -251,16 +251,16 @@
<td>
<div class="table-actions">
<a href="{{ url_for('projects.edit_project', project_id=project.id) }}" class="btn-action btn-edit" title="Edit">
<span class="icon">✏️</span>
<i class="ti ti-pencil"></i>
</a>
<a href="{{ url_for('projects.manage_project_tasks', project_id=project.id) }}" class="btn-action btn-tasks" title="Tasks">
<span class="icon">📋</span>
<i class="ti ti-clipboard-list"></i>
</a>
{% if g.user.role in [Role.ADMIN, Role.SYSTEM_ADMIN] %}
<form method="POST" action="{{ url_for('projects.delete_project', project_id=project.id) }}" class="inline-form"
onsubmit="return confirm('Are you sure you want to delete this project? This will delete all tasks, time entries, and related data!')">
<button type="submit" class="btn-action btn-delete" title="Delete">
<span class="icon">🗑️</span>
<i class="ti ti-trash"></i>
</button>
</form>
{% endif %}
@@ -275,18 +275,18 @@
<!-- No Results Message -->
<div class="no-results" id="noResults" style="display: none;">
<div class="empty-icon">🔍</div>
<div class="empty-icon"><i class="ti ti-search-off" style="font-size: 4rem;"></i></div>
<p class="empty-message">No projects found matching your search</p>
<p class="empty-hint">Try searching with different keywords</p>
</div>
{% else %}
<!-- Empty State -->
<div class="empty-state">
<div class="empty-icon">📁</div>
<div class="empty-icon"><i class="ti ti-folder-off" style="font-size: 4rem;"></i></div>
<h2 class="empty-title">No Projects Yet</h2>
<p class="empty-message">Create your first project to start tracking time</p>
<a href="{{ url_for('projects.create_project') }}" class="btn btn-primary btn-lg">
<span class="icon">+</span>
<i class="ti ti-plus"></i>
Create First Project
</a>
</div>
@@ -337,7 +337,7 @@
<div class="modal-footer">
<button type="button" class="btn btn-secondary" id="cancel-category">Cancel</button>
<button type="submit" form="category-form" class="btn btn-primary">
<span class="icon"></span>
<i class="ti ti-check"></i>
Save Category
</button>
</div>
@@ -1203,7 +1203,7 @@ document.addEventListener('DOMContentLoaded', function() {
manageCategoriesBtn.addEventListener('click', function() {
const isVisible = categoriesSection.style.display !== 'none';
categoriesSection.style.display = isVisible ? 'none' : 'block';
this.innerHTML = isVisible ? '<span class="icon">🏷️</span> Manage Categories' : '<span class="icon">🏷️</span> Hide Categories';
this.innerHTML = isVisible ? '<i class="ti ti-tag"></i> Manage Categories' : '<i class="ti ti-tag"></i> Hide Categories';
});
// View Toggle

View File

@@ -7,14 +7,14 @@
<div class="header-content">
<div class="header-left">
<h1 class="page-title">
<span class="page-icon">👥</span>
<i class="ti ti-users page-icon"></i>
Team Management
</h1>
<p class="page-subtitle">Manage teams and their members across your organization</p>
</div>
<div class="header-actions">
<a href="{{ url_for('teams.create_team') }}" class="btn btn-primary">
<span class="icon">+</span>
<i class="ti ti-plus"></i>
Create New Team
</a>
</div>
@@ -45,7 +45,7 @@
<!-- Search Bar -->
<div class="search-section">
<div class="search-container">
<span class="search-icon">🔍</span>
<i class="ti ti-search search-icon"></i>
<input type="text"
class="search-input"
id="teamSearch"
@@ -59,7 +59,7 @@
<div class="team-card" data-team-name="{{ team.name.lower() }}" data-team-desc="{{ team.description.lower() if team.description else '' }}">
<div class="team-header">
<div class="team-icon-wrapper">
<span class="team-icon">👥</span>
<i class="ti ti-users team-icon"></i>
</div>
<div class="team-meta">
<span class="member-count">{{ team.users|length }} members</span>
@@ -74,12 +74,12 @@
<div class="team-info">
<div class="info-item">
<span class="info-icon">📅</span>
<i class="ti ti-calendar info-icon"></i>
<span class="info-text">Created {{ team.created_at.strftime('%b %d, %Y') }}</span>
</div>
{% if team.users %}
<div class="info-item">
<span class="info-icon">👤</span>
<i class="ti ti-user info-icon"></i>
<span class="info-text">Led by {{ team.users[0].username }}</span>
</div>
{% endif %}
@@ -104,7 +104,7 @@
<div class="team-actions">
<a href="{{ url_for('teams.manage_team', team_id=team.id) }}" class="btn btn-manage">
<span class="icon">⚙️</span>
<i class="ti ti-settings"></i>
Manage Team
</a>
<form method="POST"
@@ -112,7 +112,7 @@
class="delete-form"
onsubmit="return confirm('Are you sure you want to delete the team \"{{ team.name }}\"? This action cannot be undone.');">
<button type="submit" class="btn btn-delete" title="Delete Team">
<span class="icon">🗑️</span>
<i class="ti ti-trash"></i>
</button>
</form>
</div>
@@ -122,18 +122,18 @@
<!-- No Results Message -->
<div class="no-results" id="noResults" style="display: none;">
<div class="empty-icon">🔍</div>
<div class="empty-icon"><i class="ti ti-search-off" style="font-size: 4rem;"></i></div>
<p class="empty-message">No teams found matching your search</p>
<p class="empty-hint">Try searching with different keywords</p>
</div>
{% else %}
<!-- Empty State -->
<div class="empty-state">
<div class="empty-icon">👥</div>
<div class="empty-icon"><i class="ti ti-users" style="font-size: 4rem;"></i></div>
<h2 class="empty-title">No Teams Yet</h2>
<p class="empty-message">Create your first team to start organizing your workforce</p>
<a href="{{ url_for('teams.create_team') }}" class="btn btn-primary btn-lg">
<span class="icon">+</span>
<i class="ti ti-plus"></i>
Create First Team
</a>
</div>

View File

@@ -230,7 +230,7 @@
</div>
<div class="modal-body">
<p>Are you sure you want to delete user <strong id="delete-username"></strong>?</p>
<p class="warning-text">⚠️ This action cannot be undone.</p>
<p class="warning-text"><i class="ti ti-alert-triangle"></i> This action cannot be undone.</p>
</div>
<div class="modal-footer">
<form id="delete-form" method="POST">

View File

@@ -3,7 +3,7 @@
{% block content %}
<div class="page-container timetrack-container">
<div class="page-header analytics-header">
<h2>📊 Time Analytics</h2>
<h2><i class="ti ti-chart-bar"></i> Time Analytics</h2>
<div class="mode-switcher">
<button class="mode-btn {% if mode == 'personal' %}active{% endif %}"
onclick="switchMode('personal')">Personal</button>
@@ -43,10 +43,10 @@
<!-- View Tabs -->
<div class="view-tabs">
<button class="tab-btn active" data-view="table">📋 Table View</button>
<button class="tab-btn" data-view="graph">📈 Graph View</button>
<button class="tab-btn active" data-view="table"><i class="ti ti-clipboard-list"></i> Table View</button>
<button class="tab-btn" data-view="graph"><i class="ti ti-trending-up"></i> Graph View</button>
{% if mode == 'team' %}
<button class="tab-btn" data-view="team">👥 Team Summary</button>
<button class="tab-btn" data-view="team"><i class="ti ti-users"></i> Team Summary</button>
{% endif %}
</div>

View File

@@ -61,7 +61,7 @@
<td>
{{ user.username }}
{% if user.two_factor_enabled %}
<span class="security-badge" title="2FA Enabled">🔒</span>
<span class="security-badge" title="2FA Enabled"><i class="ti ti-lock"></i></span>
{% endif %}
</td>
<td>{{ user.email }}</td>
@@ -112,7 +112,7 @@
<!-- Navigation -->
<div class="admin-section">
<a href="{{ url_for('companies.admin_company') }}" class="btn btn-secondary"> Back to Company Management</a>
<a href="{{ url_for('companies.admin_company') }}" class="btn btn-secondary"><i class="ti ti-arrow-left"></i> Back to Company Management</a>
</div>
</div>

View File

@@ -192,33 +192,33 @@ document.addEventListener('DOMContentLoaded', function() {
if (interval === 15) {
if (roundToNearest) {
examples.push('9:07 AM 9:00 AM');
examples.push('9:08 AM 9:15 AM');
examples.push('9:23 AM 9:30 AM');
examples.push('9:07 AM <i class="ti ti-arrow-right"></i> 9:00 AM');
examples.push('9:08 AM <i class="ti ti-arrow-right"></i> 9:15 AM');
examples.push('9:23 AM <i class="ti ti-arrow-right"></i> 9:30 AM');
} else {
examples.push('9:01 AM 9:15 AM');
examples.push('9:16 AM 9:30 AM');
examples.push('9:31 AM 9:45 AM');
examples.push('9:01 AM <i class="ti ti-arrow-right"></i> 9:15 AM');
examples.push('9:16 AM <i class="ti ti-arrow-right"></i> 9:30 AM');
examples.push('9:31 AM <i class="ti ti-arrow-right"></i> 9:45 AM');
}
} else if (interval === 30) {
if (roundToNearest) {
examples.push('9:14 AM 9:00 AM');
examples.push('9:16 AM 9:30 AM');
examples.push('9:45 AM 10:00 AM');
examples.push('9:14 AM <i class="ti ti-arrow-right"></i> 9:00 AM');
examples.push('9:16 AM <i class="ti ti-arrow-right"></i> 9:30 AM');
examples.push('9:45 AM <i class="ti ti-arrow-right"></i> 10:00 AM');
} else {
examples.push('9:01 AM 9:30 AM');
examples.push('9:31 AM 10:00 AM');
examples.push('10:01 AM 10:30 AM');
examples.push('9:01 AM <i class="ti ti-arrow-right"></i> 9:30 AM');
examples.push('9:31 AM <i class="ti ti-arrow-right"></i> 10:00 AM');
examples.push('10:01 AM <i class="ti ti-arrow-right"></i> 10:30 AM');
}
} else if (interval === 60) {
if (roundToNearest) {
examples.push('9:29 AM 9:00 AM');
examples.push('9:31 AM 10:00 AM');
examples.push('10:30 AM 11:00 AM');
examples.push('9:29 AM <i class="ti ti-arrow-right"></i> 9:00 AM');
examples.push('9:31 AM <i class="ti ti-arrow-right"></i> 10:00 AM');
examples.push('10:30 AM <i class="ti ti-arrow-right"></i> 11:00 AM');
} else {
examples.push('9:01 AM 10:00 AM');
examples.push('10:01 AM 11:00 AM');
examples.push('11:01 AM 12:00 PM');
examples.push('9:01 AM <i class="ti ti-arrow-right"></i> 10:00 AM');
examples.push('10:01 AM <i class="ti ti-arrow-right"></i> 11:00 AM');
examples.push('11:01 AM <i class="ti ti-arrow-right"></i> 12:00 PM');
}
}

View File

@@ -3,10 +3,10 @@
{% block content %}
<div class="admin-container">
<div class="header-section">
<h1>⚠️ Confirm Company Deletion</h1>
<h1><i class="ti ti-alert-triangle"></i> Confirm Company Deletion</h1>
<p class="subtitle">Critical Action Required - Review All Data Before Proceeding</p>
<a href="{{ url_for('users.admin_users') if g.user.role != Role.SYSTEM_ADMIN else url_for('users.system_admin_users') }}"
class="btn btn-md btn-secondary"> Back to User Management</a>
class="btn btn-md btn-secondary"><i class="ti ti-arrow-left"></i> Back to User Management</a>
</div>
<div class="alert alert-danger">
@@ -21,7 +21,7 @@
<!-- Company Information -->
<div class="table-section">
<h3>🏢 Company Information</h3>
<h3><i class="ti ti-building"></i> Company Information</h3>
<table class="data-table">
<tr>
<th>Company Name:</th>
@@ -45,7 +45,7 @@
<!-- Users -->
{% if users %}
<div class="table-section">
<h3>👥 Users ({{ users|length }})</h3>
<h3><i class="ti ti-users"></i> Users ({{ users|length }})</h3>
<table class="data-table">
<thead>
<tr>
@@ -83,7 +83,7 @@
<!-- Teams -->
{% if teams %}
<div class="table-section">
<h3>🏭 Teams ({{ teams|length }})</h3>
<h3><i class="ti ti-users-group"></i> Teams ({{ teams|length }})</h3>
<table class="data-table">
<thead>
<tr>
@@ -141,7 +141,7 @@
<!-- Tasks -->
{% if tasks %}
<div class="table-section">
<h3> Tasks ({{ tasks|length }})</h3>
<h3><i class="ti ti-check"></i> Tasks ({{ tasks|length }})</h3>
<table class="data-table">
<thead>
<tr>

View File

@@ -21,7 +21,7 @@
<!-- Empty Dashboard Message -->
<div id="empty-dashboard" class="empty-dashboard" style="display: none;">
<div class="empty-dashboard-content">
<div class="empty-dashboard-icon">📊</div>
<div class="empty-dashboard-icon"><i class="ti ti-chart-bar"></i></div>
<h3>Your Dashboard is Empty</h3>
<p>Add widgets to create your personalized dashboard.</p>
<button id="add-first-widget-btn" class="btn btn-md btn-primary">Add Your First Widget</button>

View File

@@ -103,7 +103,7 @@
<!-- Danger Zone (only for admins) -->
{% if g.user.role in [Role.ADMIN, Role.SYSTEM_ADMIN] %}
<div class="danger-zone">
<h3>⚠️ Danger Zone</h3>
<h3><i class="ti ti-alert-triangle"></i> Danger Zone</h3>
<div class="danger-content">
<p><strong>Delete Project</strong></p>
<p>Once you delete a project, there is no going back. This will permanently delete:</p>

View File

@@ -10,7 +10,7 @@
</div>
<div class="imprint-footer">
<a href="{{ url_for('home') }}" class="btn btn-secondary"> Back to Home</a>
<a href="{{ url_for('home') }}" class="btn btn-secondary"><i class="ti ti-arrow-left"></i> Back to Home</a>
</div>
</div>
</div>

View File

@@ -31,12 +31,12 @@
<h2 class="section-title">Powerful Features for Modern Teams</h2>
<div class="feature-cards">
<div class="feature-card">
<div class="feature-icon"></div>
<div class="feature-icon"><i class="ti ti-bolt"></i></div>
<h3>Lightning Fast</h3>
<p>Start tracking in seconds with our intuitive one-click interface</p>
</div>
<div class="feature-card">
<div class="feature-icon">📊</div>
<div class="feature-icon"><i class="ti ti-chart-bar"></i></div>
<h3>Advanced Analytics</h3>
<p>Gain insights with comprehensive reports and visual dashboards</p>
</div>
@@ -46,7 +46,7 @@
<p>Organize work into sprints with agile project tracking</p>
</div>
<div class="feature-card">
<div class="feature-icon">👥</div>
<div class="feature-icon"><i class="ti ti-users"></i></div>
<h3>Team Collaboration</h3>
<p>Manage teams, projects, and resources all in one place</p>
</div>
@@ -71,7 +71,7 @@
<div class="stat-label">Free & Open Source</div>
</div>
<div class="stat-item">
<div class="stat-number"></div>
<div class="stat-number"><i class="ti ti-infinity"></i></div>
<div class="stat-label">Unlimited Tracking</div>
</div>
<div class="stat-item">
@@ -115,14 +115,14 @@
<h3>{{ g.branding.app_name if g.branding else 'TimeTrack' }} Community</h3>
<div class="price">$0<span>/forever</span></div>
<ul class="pricing-features">
<li> Unlimited users</li>
<li> All features included</li>
<li> Time tracking & analytics</li>
<li> Sprint management</li>
<li> Team collaboration</li>
<li> Project management</li>
<li> Self-hosted option</li>
<li> No restrictions</li>
<li><i class="ti ti-check"></i> Unlimited users</li>
<li><i class="ti ti-check"></i> All features included</li>
<li><i class="ti ti-check"></i> Time tracking & analytics</li>
<li><i class="ti ti-check"></i> Sprint management</li>
<li><i class="ti ti-check"></i> Team collaboration</li>
<li><i class="ti ti-check"></i> Project management</li>
<li><i class="ti ti-check"></i> Self-hosted option</li>
<li><i class="ti ti-check"></i> No restrictions</li>
</ul>
<a href="{{ url_for('register') }}" class="btn-pricing">Get Started Free</a>
</div>
@@ -376,7 +376,7 @@
<td>
<div class="time-cell">
<span class="time-start">{{ entry.arrival_time|format_time }}</span>
<span class="time-separator"></span>
<span class="time-separator"><i class="ti ti-arrow-right"></i></span>
<span class="time-end">{{ entry.departure_time|format_time if entry.departure_time else 'Active' }}</span>
</div>
</td>

View File

@@ -31,12 +31,12 @@
<h2 class="section-title">Powerful Features for Modern Teams</h2>
<div class="feature-cards">
<div class="feature-card">
<div class="feature-icon"></div>
<div class="feature-icon"><i class="ti ti-bolt"></i></div>
<h3>Lightning Fast</h3>
<p>Start tracking in seconds with our intuitive one-click interface</p>
</div>
<div class="feature-card">
<div class="feature-icon">📊</div>
<div class="feature-icon"><i class="ti ti-chart-bar"></i></div>
<h3>Advanced Analytics</h3>
<p>Gain insights with comprehensive reports and visual dashboards</p>
</div>
@@ -46,7 +46,7 @@
<p>Organize work into sprints with agile project tracking</p>
</div>
<div class="feature-card">
<div class="feature-icon">👥</div>
<div class="feature-icon"><i class="ti ti-users"></i></div>
<h3>Team Collaboration</h3>
<p>Manage teams, projects, and resources all in one place</p>
</div>
@@ -71,7 +71,7 @@
<div class="stat-label">Free & Open Source</div>
</div>
<div class="stat-item">
<div class="stat-number"></div>
<div class="stat-number"><i class="ti ti-infinity"></i></div>
<div class="stat-label">Unlimited Tracking</div>
</div>
<div class="stat-item">
@@ -115,14 +115,14 @@
<h3>{{ g.branding.app_name if g.branding else 'TimeTrack' }} Community</h3>
<div class="price">$0<span>/forever</span></div>
<ul class="pricing-features">
<li> Unlimited users</li>
<li> All features included</li>
<li> Time tracking & analytics</li>
<li> Sprint management</li>
<li> Team collaboration</li>
<li> Project management</li>
<li> Self-hosted option</li>
<li> No restrictions</li>
<li><i class="ti ti-check"></i> Unlimited users</li>
<li><i class="ti ti-check"></i> All features included</li>
<li><i class="ti ti-check"></i> Time tracking & analytics</li>
<li><i class="ti ti-check"></i> Sprint management</li>
<li><i class="ti ti-check"></i> Team collaboration</li>
<li><i class="ti ti-check"></i> Project management</li>
<li><i class="ti ti-check"></i> Self-hosted option</li>
<li><i class="ti ti-check"></i> No restrictions</li>
</ul>
<a href="{{ url_for('register') }}" class="btn-pricing">Get Started Free</a>
</div>
@@ -376,7 +376,7 @@
<td>
<div class="time-cell">
<span class="time-start">{{ entry.arrival_time|format_time }}</span>
<span class="time-separator"></span>
<span class="time-separator"><i class="ti ti-arrow-right"></i></span>
<span class="time-end">{{ entry.departure_time|format_time if entry.departure_time else 'Active' }}</span>
</div>
</td>

View File

@@ -14,7 +14,7 @@
</div>
<div class="header-actions">
<a href="{{ url_for('invitations.list_invitations') }}" class="btn btn-secondary">
<span class="icon"></span>
<i class="ti ti-arrow-left"></i>
Back to Invitations
</a>
</div>
@@ -26,7 +26,7 @@
<div class="card invitation-form-card">
<div class="card-header">
<h2 class="card-title">
<span class="icon">👥</span>
<span class="icon"><i class="ti ti-users"></i></span>
Invitation Details
</h2>
</div>

View File

@@ -6,6 +6,7 @@
<title>{{ title }} - {{ g.branding.app_name if g.branding else 'TimeTrack' }}{% if g.company %} - {{ g.company.name }}{% endif %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/fonts.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons@latest/iconfont/tabler-icons.min.css">
{% if not g.user %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/splash.css') }}">
{% endif %}
@@ -25,7 +26,7 @@
border-color: {{ (g.branding.primary_color if g.branding else '#007bff') + 'dd' }};
}
.nav-icon {
color: var(--primary-color);
color: rgb(116, 85, 175) /* var(--primary-color); */
}
a:hover {
color: var(--primary-color);
@@ -116,10 +117,10 @@
</div>
<div class="user-dropdown-menu">
<ul>
<li><a href="{{ url_for('profile') }}"><i class="nav-icon">👤</i>Profile</a></li>
<li><a href="{{ url_for('config') }}"><i class="nav-icon">⚙️</i>Settings</a></li>
<li><a href="{{ url_for('profile') }}"><i class="nav-icon ti ti-user"></i>Profile</a></li>
<li><a href="{{ url_for('config') }}"><i class="nav-icon ti ti-settings"></i>Settings</a></li>
<li class="user-dropdown-divider"></li>
<li><a href="{{ url_for('logout') }}"><i class="nav-icon">🚪</i>Logout</a></li>
<li><a href="{{ url_for('logout') }}"><i class="nav-icon ti ti-logout"></i>Logout</a></li>
</ul>
</div>
</div>
@@ -128,38 +129,38 @@
<nav class="sidebar-nav">
<ul>
{% if g.user %}
<li><a href="{{ url_for('home') }}" data-tooltip="Home"><i class="nav-icon">🏠</i><span class="nav-text">Home</span></a></li>
<li><a href="{{ url_for('time_tracking') }}" data-tooltip="Time Tracking"><i class="nav-icon">⏱️</i><span class="nav-text">Time Tracking</span></a></li>
<li><a href="{{ url_for('dashboard') }}" data-tooltip="Dashboard"><i class="nav-icon">📊</i><span class="nav-text">Dashboard</span></a></li>
<li><a href="{{ url_for('tasks.unified_task_management') }}" data-tooltip="Task Management"><i class="nav-icon">📋</i><span class="nav-text">Task Management</span></a></li>
<li><a href="{{ url_for('sprints.sprint_management') }}" data-tooltip="Sprint Management"><i class="nav-icon">🏃‍♂️</i><span class="nav-text">Sprints</span></a></li>
<li><a href="{{ url_for('notes.notes_list') }}" data-tooltip="Notes"><i class="nav-icon">📝</i><span class="nav-text">Notes</span></a></li>
<li><a href="{{ url_for('analytics') }}" data-tooltip="Time Analytics"><i class="nav-icon">📊</i><span class="nav-text">Analytics</span></a></li>
<li><a href="{{ url_for('home') }}" data-tooltip="Home"><i class="nav-icon ti ti-home"></i><span class="nav-text">Home</span></a></li>
<li><a href="{{ url_for('time_tracking') }}" data-tooltip="Time Tracking"><i class="nav-icon ti ti-clock"></i><span class="nav-text">Time Tracking</span></a></li>
<li><a href="{{ url_for('dashboard') }}" data-tooltip="Dashboard"><i class="nav-icon ti ti-dashboard"></i><span class="nav-text">Dashboard</span></a></li>
<li><a href="{{ url_for('tasks.unified_task_management') }}" data-tooltip="Task Management"><i class="nav-icon ti ti-clipboard-list"></i><span class="nav-text">Task Management</span></a></li>
<li><a href="{{ url_for('sprints.sprint_management') }}" data-tooltip="Sprint Management"><i class="nav-icon ti ti-run"></i><span class="nav-text">Sprints</span></a></li>
<li><a href="{{ url_for('notes.notes_list') }}" data-tooltip="Notes"><i class="nav-icon ti ti-notes"></i><span class="nav-text">Notes</span></a></li>
<li><a href="{{ url_for('analytics') }}" data-tooltip="Time Analytics"><i class="nav-icon ti ti-chart-bar"></i><span class="nav-text">Analytics</span></a></li>
<!-- Role-based menu items -->
{% if g.user.role == Role.ADMIN or g.user.role == Role.SYSTEM_ADMIN %}
<li class="nav-divider">Admin</li>
<li><a href="{{ url_for('companies.admin_company') }}" data-tooltip="Company Settings"><i class="nav-icon">🏢</i><span class="nav-text">Company Settings</span></a></li>
<li><a href="{{ url_for('users.admin_users') }}" data-tooltip="Manage Users"><i class="nav-icon">👥</i><span class="nav-text">Manage Users</span></a></li>
<li><a href="{{ url_for('invitations.list_invitations') }}" data-tooltip="Invitations"><i class="nav-icon">📨</i><span class="nav-text">Invitations</span></a></li>
<li><a href="{{ url_for('teams.admin_teams') }}" data-tooltip="Manage Teams"><i class="nav-icon">🏭</i><span class="nav-text">Manage Teams</span></a></li>
<li><a href="{{ url_for('projects.admin_projects') }}" data-tooltip="Manage Projects"><i class="nav-icon">📝</i><span class="nav-text">Manage Projects</span></a></li>
<li><a href="{{ url_for('companies.admin_company') }}" data-tooltip="Company Settings"><i class="nav-icon ti ti-building"></i><span class="nav-text">Company Settings</span></a></li>
<li><a href="{{ url_for('users.admin_users') }}" data-tooltip="Manage Users"><i class="nav-icon ti ti-users"></i><span class="nav-text">Manage Users</span></a></li>
<li><a href="{{ url_for('invitations.list_invitations') }}" data-tooltip="Invitations"><i class="nav-icon ti ti-mail"></i><span class="nav-text">Invitations</span></a></li>
<li><a href="{{ url_for('teams.admin_teams') }}" data-tooltip="Manage Teams"><i class="nav-icon ti ti-users-group"></i><span class="nav-text">Manage Teams</span></a></li>
<li><a href="{{ url_for('projects.admin_projects') }}" data-tooltip="Manage Projects"><i class="nav-icon ti ti-folder"></i><span class="nav-text">Manage Projects</span></a></li>
{% if g.user.role == Role.SYSTEM_ADMIN %}
<li class="nav-divider">System Admin</li>
<li><a href="{{ url_for('system_admin.system_admin_dashboard') }}" data-tooltip="System Dashboard"><i class="nav-icon">🌐</i><span class="nav-text">System Dashboard</span></a></li>
<li><a href="{{ url_for('announcements.index') }}" data-tooltip="Announcements"><i class="nav-icon">📢</i><span class="nav-text">Announcements</span></a></li>
<li><a href="{{ url_for('system_admin.system_admin_dashboard') }}" data-tooltip="System Dashboard"><i class="nav-icon ti ti-world"></i><span class="nav-text">System Dashboard</span></a></li>
<li><a href="{{ url_for('announcements.index') }}" data-tooltip="Announcements"><i class="nav-icon ti ti-speakerphone"></i><span class="nav-text">Announcements</span></a></li>
{% endif %}
{% elif g.user.role in [Role.TEAM_LEADER, Role.SUPERVISOR] %}
<li class="nav-divider">Team</li>
<li><a href="{{ url_for('dashboard') }}" data-tooltip="Dashboard"><i class="nav-icon">📈</i><span class="nav-text">Dashboard</span></a></li>
<li><a href="{{ url_for('dashboard') }}" data-tooltip="Dashboard"><i class="nav-icon ti ti-chart-line"></i><span class="nav-text">Dashboard</span></a></li>
{% if g.user.role == Role.SUPERVISOR %}
<li><a href="{{ url_for('projects.admin_projects') }}" data-tooltip="Manage Projects"><i class="nav-icon">📝</i><span class="nav-text">Manage Projects</span></a></li>
<li><a href="{{ url_for('projects.admin_projects') }}" data-tooltip="Manage Projects"><i class="nav-icon ti ti-folder"></i><span class="nav-text">Manage Projects</span></a></li>
{% endif %}
{% endif %}
{% else %}
<li><a href="{{ url_for('about') }}" data-tooltip="About"><i class="nav-icon"></i><span class="nav-text">About</span></a></li>
<li><a href="{{ url_for('login') }}" data-tooltip="Login"><i class="nav-icon">🔑</i><span class="nav-text">Login</span></a></li>
<li><a href="{{ url_for('register') }}" data-tooltip="Register"><i class="nav-icon">📝</i><span class="nav-text">Register</span></a></li>
<li><a href="{{ url_for('about') }}" data-tooltip="About"><i class="nav-icon ti ti-info-circle"></i><span class="nav-text">About</span></a></li>
<li><a href="{{ url_for('login') }}" data-tooltip="Login"><i class="nav-icon ti ti-key"></i><span class="nav-text">Login</span></a></li>
<li><a href="{{ url_for('register') }}" data-tooltip="Register"><i class="nav-icon ti ti-user-plus"></i><span class="nav-text">Register</span></a></li>
{% endif %}
</ul>
</nav>
@@ -210,7 +211,7 @@
{% if g.show_email_nag %}
<div class="email-nag-banner">
<div class="email-nag-content">
<span class="email-nag-icon">📧</span>
<span class="email-nag-icon"><i class="ti ti-mail"></i></span>
<span class="email-nag-text">
<strong>Add your email address</strong> to enable account recovery and receive important notifications.
</span>
@@ -221,7 +222,7 @@
{% elif g.show_email_verification_nag %}
<div class="email-nag-banner email-verify">
<div class="email-nag-content">
<span class="email-nag-icon">✉️</span>
<span class="email-nag-icon"><i class="ti ti-mail-opened"></i></span>
<span class="email-nag-text">
<strong>Please verify your email address</strong> to ensure you can recover your account if needed.
</span>

View File

@@ -7,7 +7,7 @@
<div class="header-content">
<div class="header-left">
<h1 class="page-title">
<span class="page-icon">{% if note %}✏️{% else %}📝{% endif %}</span>
<span class="page-icon">{% if note %}<i class="ti ti-pencil"></i>{% else %}<i class="ti ti-notes"></i>{% endif %}</span>
{% if note %}Edit Note{% else %}Create New Note{% endif %}
</h1>
<p class="page-subtitle">
@@ -20,15 +20,15 @@
</div>
<div class="header-actions">
<button type="button" class="btn btn-secondary" id="settings-toggle">
<span class="icon">⚙️</span>
<span class="icon"><i class="ti ti-settings"></i></span>
Settings
</button>
<button type="button" class="btn btn-secondary" id="preview-toggle">
<span class="icon">👁️</span>
<span class="icon"><i class="ti ti-eye"></i></span>
<span class="toggle-text">Hide Preview</span>
</button>
<a href="{{ url_for('notes.notes_list') }}" class="btn btn-secondary">
<span class="icon">×</span>
<span class="icon"><i class="ti ti-x"></i></span>
Cancel
</a>
</div>
@@ -41,25 +41,25 @@
<div class="settings-grid">
<div class="settings-item">
<label for="visibility" class="settings-label">
<span class="icon">👁️</span>
<span class="icon"><i class="ti ti-eye"></i></span>
Visibility
</label>
<select id="visibility" name="visibility" class="form-control">
<option value="Private" {% if not note or note.visibility.value == 'Private' %}selected{% endif %}>
🔒 Private - Only you can see this
<i class="ti ti-lock"></i> Private - Only you can see this
</option>
<option value="Team" {% if note and note.visibility.value == 'Team' %}selected{% endif %}>
👥 Team - Your team members can see this
<i class="ti ti-users"></i> Team - Your team members can see this
</option>
<option value="Company" {% if note and note.visibility.value == 'Company' %}selected{% endif %}>
🏢 Company - Everyone in your company can see this
<i class="ti ti-building"></i> Company - Everyone in your company can see this
</option>
</select>
</div>
<div class="settings-item">
<label for="folder" class="settings-label">
<span class="icon">📁</span>
<span class="icon"><i class="ti ti-folder"></i></span>
Folder
</label>
<input type="text" id="folder" name="folder" class="form-control"
@@ -75,7 +75,7 @@
<div class="settings-item">
<label for="tags" class="settings-label">
<span class="icon">🏷️</span>
<span class="icon"><i class="ti ti-tag"></i></span>
Tags
</label>
<input type="text" id="tags" name="tags" class="form-control"
@@ -86,7 +86,7 @@
<div class="settings-item">
<label for="project_id" class="settings-label">
<span class="icon">📋</span>
<span class="icon"><i class="ti ti-clipboard-list"></i></span>
Project
</label>
<select id="project_id" name="project_id" class="form-control">
@@ -103,7 +103,7 @@
<div class="settings-item">
<label for="task_id" class="settings-label">
<span class="icon"></span>
<span class="icon"><i class="ti ti-check"></i></span>
Task
</label>
<select id="task_id" name="task_id" class="form-control">
@@ -119,7 +119,7 @@
<div class="settings-item">
<label class="settings-label">
<span class="icon">📌</span>
<span class="icon"><i class="ti ti-pin"></i></span>
Pin Note
</label>
<label class="toggle-switch">
@@ -150,7 +150,7 @@
<div class="editor-toolbar">
<div class="toolbar-group">
<button type="button" class="toolbar-btn" onclick="toggleFrontmatter()" title="Toggle Frontmatter">
<span class="icon">📄</span>
<span class="icon"><i class="ti ti-file-settings"></i></span>
<span class="btn-text">Frontmatter</span>
</button>
</div>
@@ -190,16 +190,16 @@
<div class="toolbar-group">
<button type="button" class="toolbar-btn" onclick="insertMarkdown('- ', '')" title="Bullet List">
<span class="icon"></span>
<span class="icon"><i class="ti ti-list"></i></span>
</button>
<button type="button" class="toolbar-btn" onclick="insertMarkdown('1. ', '')" title="Numbered List">
<span class="icon">1.</span>
</button>
<button type="button" class="toolbar-btn" onclick="insertMarkdown('- [ ] ', '')" title="Checklist">
<span class="icon"></span>
<span class="icon"><i class="ti ti-checkbox"></i></span>
</button>
<button type="button" class="toolbar-btn" onclick="insertMarkdown('> ', '')" title="Quote">
<span class="icon"></span>
<i class="ti ti-quote"></i>
</button>
</div>
@@ -207,19 +207,19 @@
<div class="toolbar-group">
<button type="button" class="toolbar-btn" onclick="insertMarkdown('[', '](url)')" title="Link (Ctrl+K)">
<span class="icon">🔗</span>
<i class="ti ti-link"></i>
</button>
<button type="button" class="toolbar-btn" onclick="insertMarkdown('![alt text](', ')')" title="Image">
<span class="icon">🖼️</span>
<i class="ti ti-photo"></i>
</button>
<button type="button" class="toolbar-btn" onclick="insertTable()" title="Table">
<span class="icon"></span>
<i class="ti ti-table"></i>
</button>
<button type="button" class="toolbar-btn" onclick="insertMarkdown('```\n', '\n```')" title="Code Block">
<span class="icon">{ }</span>
<i class="ti ti-code"></i>
</button>
<button type="button" class="toolbar-btn" onclick="insertMarkdown('\n---\n', '')" title="Horizontal Rule">
<span class="icon"></span>
<i class="ti ti-minus"></i>
</button>
</div>
</div>
@@ -237,7 +237,7 @@
</div>
<div class="editor-actions">
<button type="submit" class="btn btn-primary">
<span class="icon">💾</span>
<i class="ti ti-device-floppy"></i>
{% if note %}Update Note{% else %}Create Note{% endif %}
</button>
</div>
@@ -250,7 +250,7 @@
<div class="preview-card">
<div class="preview-header">
<h3 class="preview-title">
<span class="icon">👁️</span>
<span class="icon"><i class="ti ti-eye"></i></span>
Preview
</h3>
</div>

View File

@@ -30,7 +30,7 @@
Fullscreen
</button>
<a href="{{ url_for('notes.view_note', slug=note.slug) }}" class="btn btn-secondary">
<span class="icon"></span>
<i class="ti ti-arrow-left"></i>
Back to Note
</a>
</div>

View File

@@ -9,29 +9,29 @@
<h1 class="page-title">{{ note.title }}</h1>
<div class="page-meta">
<span class="visibility-badge visibility-{{ note.visibility.value.lower() }}">
{% if note.visibility.value == 'Private' %}🔒{% elif note.visibility.value == 'Team' %}👥{% else %}🏢{% endif %}
{% if note.visibility.value == 'Private' %}<i class="ti ti-lock"></i>{% elif note.visibility.value == 'Team' %}<i class="ti ti-users"></i>{% else %}<i class="ti ti-building"></i>{% endif %}
{{ note.visibility.value }}
</span>
{% if note.is_pinned %}
<span class="pin-badge">
<span class="icon">📌</span>
<span class="icon"><i class="ti ti-pin"></i></span>
Pinned
</span>
{% endif %}
<span class="meta-divider"></span>
<span class="author">
<span class="icon">👤</span>
<span class="icon"><i class="ti ti-user"></i></span>
{{ note.created_by.username }}
</span>
<span class="meta-divider"></span>
<span class="date">
<span class="icon">📅</span>
<span class="icon"><i class="ti ti-calendar"></i></span>
Created {{ note.created_at|format_date }}
</span>
{% if note.updated_at > note.created_at %}
<span class="meta-divider"></span>
<span class="date">
<span class="icon">🔄</span>
<span class="icon"><i class="ti ti-refresh"></i></span>
Updated {{ note.updated_at|format_date }}
</span>
{% endif %}
@@ -40,48 +40,48 @@
<div class="header-actions">
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="downloadDropdown" data-toggle="dropdown">
<span class="icon">⬇️</span>
<span class="icon"><i class="ti ti-download"></i></span>
Download
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="{{ url_for('notes_download.download_note', slug=note.slug, format='md') }}">
<span class="icon">📄</span>
<span class="icon"><i class="ti ti-file-text"></i></span>
Markdown (.md)
</a>
<a class="dropdown-item" href="{{ url_for('notes_download.download_note', slug=note.slug, format='html') }}">
<span class="icon">🌐</span>
<span class="icon"><i class="ti ti-world"></i></span>
HTML (.html)
</a>
<a class="dropdown-item" href="{{ url_for('notes_download.download_note', slug=note.slug, format='txt') }}">
<span class="icon">📃</span>
<span class="icon"><i class="ti ti-file"></i></span>
Plain Text (.txt)
</a>
</div>
</div>
<a href="{{ url_for('notes.view_note_mindmap', slug=note.slug) }}" class="btn btn-secondary">
<span class="icon">🧠</span>
<span class="icon"><i class="ti ti-brain"></i></span>
Mind Map
</a>
{% if note.can_user_edit(g.user) %}
<button type="button" class="btn btn-secondary" onclick="showShareModal()">
<span class="icon">🔗</span>
<span class="icon"><i class="ti ti-link"></i></span>
Share
</button>
<a href="{{ url_for('notes.edit_note', slug=note.slug) }}" class="btn btn-primary">
<span class="icon">✏️</span>
<span class="icon"><i class="ti ti-pencil"></i></span>
Edit
</a>
<form method="POST" action="{{ url_for('notes.delete_note', slug=note.slug) }}"
style="display: inline;"
onsubmit="return confirm('Are you sure you want to delete this note?')">
<button type="submit" class="btn btn-danger">
<span class="icon">🗑️</span>
<span class="icon"><i class="ti ti-trash"></i></span>
Delete
</button>
</form>
{% endif %}
<a href="{{ url_for('notes.notes_list') }}" class="btn btn-secondary">
<span class="icon"></span>
<span class="icon"><i class="ti ti-arrow-left"></i></span>
Back to Notes
</a>
</div>
@@ -95,7 +95,7 @@
{% if note.folder %}
<div class="metadata-item">
<span class="metadata-label">
<span class="icon">📁</span>
<span class="icon"><i class="ti ti-folder"></i></span>
Folder
</span>
<span class="metadata-value">
@@ -109,7 +109,7 @@
{% if note.project %}
<div class="metadata-item">
<span class="metadata-label">
<span class="icon">📋</span>
<span class="icon"><i class="ti ti-clipboard-list"></i></span>
Project
</span>
<span class="metadata-value">
@@ -123,7 +123,7 @@
{% if note.task %}
<div class="metadata-item">
<span class="metadata-label">
<span class="icon"></span>
<span class="icon"><i class="ti ti-check"></i></span>
Task
</span>
<span class="metadata-value">
@@ -137,7 +137,7 @@
{% if note.tags %}
<div class="metadata-item">
<span class="metadata-label">
<span class="icon">🏷️</span>
<span class="icon"><i class="ti ti-tag"></i></span>
Tags
</span>
<span class="metadata-value">
@@ -167,7 +167,7 @@
<div class="linked-notes-card">
<div class="card-header">
<h2 class="section-title">
<span class="icon">🔗</span>
<span class="icon"><i class="ti ti-link"></i></span>
Linked Notes
</h2>
{% if note.can_user_edit(g.user) %}
@@ -183,7 +183,7 @@
{% for link in outgoing_links %}
<div class="linked-note-item">
<div class="link-direction outgoing">
<span class="direction-icon"></span>
<span class="direction-icon"><i class="ti ti-arrow-right"></i></span>
<span class="link-type">{{ link.link_type|title }}</span>
</div>
<div class="linked-note-content">
@@ -202,7 +202,7 @@
</div>
{% if note.can_user_edit(g.user) %}
<button class="remove-link-btn" data-target-id="{{ link.target_note_id }}" title="Remove link">
<span class="icon">×</span>
<span class="icon"><i class="ti ti-x"></i></span>
</button>
{% endif %}
</div>
@@ -211,7 +211,7 @@
{% for link in incoming_links %}
<div class="linked-note-item">
<div class="link-direction incoming">
<span class="direction-icon"></span>
<span class="direction-icon"><i class="ti ti-arrow-left"></i></span>
<span class="link-type">{{ link.link_type|title }}</span>
</div>
<div class="linked-note-content">
@@ -230,7 +230,7 @@
</div>
{% if note.can_user_edit(g.user) %}
<button class="remove-link-btn" data-target-id="{{ link.source_note_id }}" title="Remove link">
<span class="icon">×</span>
<span class="icon"><i class="ti ti-x"></i></span>
</button>
{% endif %}
</div>
@@ -1009,7 +1009,7 @@ window.onclick = function(event) {
placeholder="Leave empty for no password">
</div>
<button type="submit" class="btn btn-primary">
<span class="icon"></span>
<span class="icon"><i class="ti ti-plus"></i></span>
Create Share Link
</button>
</form>
@@ -1325,37 +1325,37 @@ function createShareItem(share) {
${isInvalid ? 'disabled' : ''}>
${!isInvalid ? `
<button class="btn btn-sm btn-secondary" onclick="copyShareUrl(${share.id})">
<span class="icon">📋</span>
<span class="icon"><i class="ti ti-clipboard-list"></i></span>
Copy
</button>
` : ''}
</div>
<div class="share-meta">
<div class="share-meta-item">
<span class="icon">👁️</span>
<span class="icon"><i class="ti ti-eye"></i></span>
<span>${share.view_count}${share.max_views ? `/${share.max_views}` : ''} views</span>
</div>
${share.expires_at ? `
<div class="share-meta-item">
<span class="icon"></span>
<span class="icon"><i class="ti ti-clock"></i></span>
<span>${isExpired ? 'Expired' : 'Expires'} ${new Date(share.expires_at).toLocaleDateString()}</span>
</div>
` : ''}
${share.has_password ? `
<div class="share-meta-item">
<span class="icon">🔒</span>
<span class="icon"><i class="ti ti-lock"></i></span>
<span>Password protected</span>
</div>
` : ''}
<div class="share-meta-item">
<span class="icon">👤</span>
<span class="icon"><i class="ti ti-user"></i></span>
<span>Created by ${share.created_by}</span>
</div>
</div>
</div>
<div class="share-actions">
<button class="btn btn-sm btn-danger" onclick="deleteShare(${share.id})">
<span class="icon">🗑️</span>
<span class="icon"><i class="ti ti-trash"></i></span>
Delete
</button>
</div>

View File

@@ -7,18 +7,18 @@
<div class="header-content">
<div class="header-left">
<h1 class="page-title">
<span class="page-icon">📁</span>
<span class="page-icon"><i class="ti ti-folder"></i></span>
Note Folders
</h1>
<p class="page-subtitle">Organize your notes with folders</p>
</div>
<div class="header-actions">
<button type="button" class="btn btn-success" onclick="showCreateFolderModal()">
<span class="icon"></span>
<span class="icon"><i class="ti ti-plus"></i></span>
Create Folder
</button>
<a href="{{ url_for('notes.notes_list') }}" class="btn btn-secondary">
<span class="icon"></span>
<span class="icon"><i class="ti ti-arrow-left"></i></span>
Back to Notes
</a>
</div>
@@ -460,7 +460,7 @@ function loadFolderDetails(folderPath) {
.then(data => {
const detailsHtml = `
<div class="folder-details">
<h4><span class="folder-icon">📁</span> ${data.name}</h4>
<h4><span class="folder-icon"><i class="ti ti-folder"></i></span> ${data.name}</h4>
<div class="folder-path">${data.path}</div>
<div class="folder-stats">
@@ -628,7 +628,7 @@ document.getElementById('folderModal').addEventListener('click', function(e) {
{% if children %}
<span onclick="toggleFolder(event, '{{ folder }}')" style="position: absolute; left: -15px; cursor: pointer;"></span>
{% endif %}
<span class="folder-icon">📁</span>
<span class="folder-icon"><i class="ti ti-folder"></i></span>
<span class="folder-name">{{ folder.split('/')[-1] }}</span>
<span class="folder-count">({{ folder_counts.get(folder, 0) }})</span>
</div>

View File

@@ -6,7 +6,7 @@
{% set folder_name = folder_path.split('/')[-1] %}
{% set is_active = folder_filter == folder_path %}
<div class="folder-item {% if is_active %}active{% endif %}" style="padding-left: {{ (folder_path.count('/') + 1) * 20 }}px;">
<span class="folder-icon">📁</span>
<span class="folder-icon"><i class="ti ti-folder"></i></span>
<a href="{{ url_for('notes.notes_list', folder=folder_path) }}" class="folder-link">
{{ folder_name }}
</a>
@@ -25,22 +25,22 @@
<div class="header-content">
<div class="header-left">
<h1 class="page-title">
<span class="page-icon">📝</span>
<span class="page-icon"><i class="ti ti-notes"></i></span>
Notes & Documentation
</h1>
<p class="page-subtitle">Organize your thoughts and documentation</p>
</div>
<div class="header-actions">
<a href="{{ url_for('notes.create_note') }}" class="btn btn-primary">
<span class="icon"></span>
<span class="icon"><i class="ti ti-plus"></i></span>
Create New Note
</a>
<button type="button" class="btn btn-secondary" id="toggle-sidebar">
<span class="icon">📁</span>
<span class="icon"><i class="ti ti-folder"></i></span>
Toggle Folders
</button>
<a href="{{ url_for('notes.notes_folders') }}" class="btn btn-secondary">
<span class="icon">⚙️</span>
<span class="icon"><i class="ti ti-settings"></i></span>
Manage Folders
</a>
</div>
@@ -59,7 +59,7 @@
class="form-control"
placeholder="Search notes..."
value="{{ search_query }}">
<button type="submit" class="search-btn">🔍</button>
<button type="submit" class="search-btn"><i class="ti ti-search"></i></button>
</div>
</form>
</div>
@@ -69,7 +69,7 @@
<h4>Folders</h4>
<div class="folder-tree">
<div class="folder-item {% if not folder_filter %}active{% endif %}">
<span class="folder-icon">🏠</span>
<span class="folder-icon"><i class="ti ti-home"></i></span>
<a href="{{ url_for('notes.notes_list') }}" class="folder-link">All Notes</a>
<span class="folder-count">({{ notes|length }})</span>
</div>
@@ -85,7 +85,7 @@
{% for tag in all_tags %}
<a href="{{ url_for('notes.notes_list', tag=tag) }}"
class="tag-link {% if tag_filter == tag %}active{% endif %}">
<span class="tag-icon">🏷️</span>
<span class="tag-icon"><i class="ti ti-tag"></i></span>
{{ tag }}
<span class="tag-count">({{ tag_counts.get(tag, 0) }})</span>
</a>
@@ -102,19 +102,19 @@
<div class="visibility-filters">
<a href="{{ url_for('notes.notes_list') }}"
class="visibility-link {% if not visibility_filter %}active{% endif %}">
<span>👁️</span> All Notes
<span><i class="ti ti-eye"></i></span> All Notes
</a>
<a href="{{ url_for('notes.notes_list', visibility='private') }}"
class="visibility-link {% if visibility_filter == 'private' %}active{% endif %}">
<span>🔒</span> Private
<span><i class="ti ti-lock"></i></span> Private
</a>
<a href="{{ url_for('notes.notes_list', visibility='team') }}"
class="visibility-link {% if visibility_filter == 'team' %}active{% endif %}">
<span>👥</span> Team
<span><i class="ti ti-users"></i></span> Team
</a>
<a href="{{ url_for('notes.notes_list', visibility='company') }}"
class="visibility-link {% if visibility_filter == 'company' %}active{% endif %}">
<span>🏢</span> Company
<span><i class="ti ti-building"></i></span> Company
</a>
</div>
</div>
@@ -128,25 +128,25 @@
<span>Active filters:</span>
{% if folder_filter %}
<span class="filter-tag">
📁 {{ folder_filter }}
<i class="ti ti-folder"></i> {{ folder_filter }}
<a href="{{ url_for('notes.notes_list', tag=tag_filter, visibility=visibility_filter, search=search_query) }}" class="remove-filter">×</a>
</span>
{% endif %}
{% if tag_filter %}
<span class="filter-tag">
🏷️ {{ tag_filter }}
<i class="ti ti-tag"></i> {{ tag_filter }}
<a href="{{ url_for('notes.notes_list', folder=folder_filter, visibility=visibility_filter, search=search_query) }}" class="remove-filter">×</a>
</span>
{% endif %}
{% if visibility_filter %}
<span class="filter-tag">
👁️ {{ visibility_filter|title }}
<i class="ti ti-eye"></i> {{ visibility_filter|title }}
<a href="{{ url_for('notes.notes_list', folder=folder_filter, tag=tag_filter, search=search_query) }}" class="remove-filter">×</a>
</span>
{% endif %}
{% if search_query %}
<span class="filter-tag">
🔍 "{{ search_query }}"
<i class="ti ti-search"></i> "{{ search_query }}"
<a href="{{ url_for('notes.notes_list', folder=folder_filter, tag=tag_filter, visibility=visibility_filter) }}" class="remove-filter">×</a>
</span>
{% endif %}
@@ -159,10 +159,10 @@
<div class="view-controls">
<div class="view-toggle">
<button class="toggle-btn active" data-view="grid" onclick="switchView('grid')">
<span></span> Grid
<span><i class="ti ti-layout-grid"></i></span> Grid
</button>
<button class="toggle-btn" data-view="list" onclick="switchView('list')">
<span></span> List
<span><i class="ti ti-list"></i></span> List
</button>
</div>
</div>
@@ -176,10 +176,10 @@
draggable="true">
<div class="note-card-header">
{% if note.is_pinned %}
<span class="pin-indicator" title="Pinned">📌</span>
<span class="pin-indicator" title="Pinned"><i class="ti ti-pin"></i></span>
{% endif %}
<span class="visibility-badge visibility-{{ note.visibility.value.lower() }}">
{% if note.visibility.value == 'Private' %}🔒{% elif note.visibility.value == 'Team' %}👥{% else %}🏢{% endif %}
{% if note.visibility.value == 'Private' %}<i class="ti ti-lock"></i>{% elif note.visibility.value == 'Team' %}<i class="ti ti-users"></i>{% else %}<i class="ti ti-building"></i>{% endif %}
{{ note.visibility.value }}
</span>
</div>
@@ -200,13 +200,13 @@
<div class="note-footer">
<span class="note-meta">
<span>📁</span> {{ note.folder or 'No folder' }}
<span><i class="ti ti-folder"></i></span> {{ note.folder or 'No folder' }}
</span>
<span class="note-meta">
<span>👤</span> {{ note.created_by.username }}
<span><i class="ti ti-user"></i></span> {{ note.created_by.username }}
</span>
<span class="note-meta">
<span>🕒</span> {{ note.updated_at.strftime('%b %d, %Y') }}
<span><i class="ti ti-clock"></i></span> {{ note.updated_at.strftime('%b %d, %Y') }}
</span>
</div>
@@ -241,7 +241,7 @@
data-note-id="{{ note.id }}"
draggable="true">
<td>
{% if note.is_pinned %}<span class="pin-indicator" title="Pinned">📌</span>{% endif %}
{% if note.is_pinned %}<span class="pin-indicator" title="Pinned"><i class="ti ti-pin"></i></span>{% endif %}
<a href="{{ url_for('notes.view_note', slug=note.slug) }}">{{ note.title }}</a>
</td>
<td>{{ note.folder or '-' }}</td>
@@ -256,7 +256,7 @@
</td>
<td>
<span class="visibility-badge visibility-{{ note.visibility.value.lower() }}">
{% if note.visibility.value == 'Private' %}🔒{% elif note.visibility.value == 'Team' %}👥{% else %}🏢{% endif %}
{% if note.visibility.value == 'Private' %}<i class="ti ti-lock"></i>{% elif note.visibility.value == 'Team' %}<i class="ti ti-users"></i>{% else %}<i class="ti ti-building"></i>{% endif %}
{{ note.visibility.value }}
</span>
</td>
@@ -275,7 +275,7 @@
</div>
{% else %}
<div class="empty-state">
<div class="empty-icon">📝</div>
<div class="empty-icon"><i class="ti ti-notes"></i></div>
<h3>No notes found</h3>
<p>
{% if folder_filter or tag_filter or visibility_filter or search_query %}
@@ -821,6 +821,22 @@
margin-bottom: 20px;
}
.empty-icon i {
font-size: 3rem;
color: #667eea;
}
/* Icon styling */
.folder-icon i, .tag-icon i, .visibility-link i,
.filter-tag i, .note-meta i, .search-btn i,
.page-icon i {
font-size: 1em;
}
.btn .icon i {
font-size: 1.1em;
}
/* List View / Table */
.notes-table {
width: 100%;

View File

@@ -20,7 +20,7 @@
<span class="stat-text">{{ user.company.name if user.company else 'No Company' }}</span>
</div>
<div class="stat-badge">
<span class="stat-icon">👥</span>
<span class="stat-icon"><i class="ti ti-users"></i></span>
<span class="stat-text">{{ user.team.name if user.team else 'No Team' }}</span>
</div>
<div class="stat-badge">
@@ -81,7 +81,7 @@
<!-- Default Avatar Tab -->
<div class="tab-content active" id="default-tab">
<div class="info-message">
<span class="info-icon">💡</span>
<span class="info-icon"><i class="ti ti-bulb"></i></span>
<p>Your default avatar is automatically generated based on your username.</p>
</div>
<button type="button" class="btn btn-outline" onclick="resetAvatar()">
@@ -190,7 +190,7 @@
{% if user.email and not user.is_verified %}
<div class="alert alert-warning">
<span class="alert-icon">⚠️</span>
<span class="alert-icon"><i class="ti ti-alert-triangle"></i></span>
<div>
<p>Your email address is not verified.</p>
<a href="{{ url_for('profile') }}" class="btn btn-sm btn-warning">Send Verification Email</a>
@@ -285,7 +285,7 @@
</form>
{% else %}
<div class="status-indicator disabled">
<span class="status-icon">⚠️</span>
<span class="status-icon"><i class="ti ti-alert-triangle"></i></span>
<div>
<div class="status-text">Disabled</div>
<div class="status-description">Add extra security to your account</div>

View File

@@ -234,7 +234,7 @@
</div>
<div class="verification-notice">
<p>💡 You can register without an email, but we recommend adding one for account recovery.</p>
<p><i class="ti ti-bulb"></i> You can register without an email, but we recommend adding one for account recovery.</p>
</div>
</form>
</div>

View File

@@ -91,7 +91,7 @@
<span>Email: <strong>{{ invitation.email }}</strong></span>
</div>
<div class="detail-item">
<span class="detail-icon">👥</span>
<span class="detail-icon"><i class="ti ti-users"></i></span>
<span>Invited by: <strong>{{ invitation.invited_by.username }}</strong></span>
</div>
</div>
@@ -150,7 +150,7 @@
</div>
<div class="verification-notice">
<p> Your email is pre-verified through this invitation</p>
<p><i class="ti ti-check"></i> Your email is pre-verified through this invitation</p>
</div>
</form>
</div>

View File

@@ -13,17 +13,17 @@
<!-- Info Message -->
{% if is_initial_setup %}
<div class="info-message">
<h3>🎉 Let's Get Started!</h3>
<h3><i class="ti ti-confetti"></i> Let's Get Started!</h3>
<p>Set up your company and create the first administrator account to begin using {{ g.branding.app_name }}.</p>
</div>
{% elif is_super_admin %}
<div class="info-message">
<h3>🏢 New Company Setup</h3>
<h3><i class="ti ti-building"></i> New Company Setup</h3>
<p>Create a new company with its own administrator. This will be a separate organization within {{ g.branding.app_name }}.</p>
</div>
{% else %}
<div class="error-message">
<h3>⚠️ Access Denied</h3>
<h3><i class="ti ti-alert-triangle"></i> Access Denied</h3>
<p>You do not have permission to create new companies.</p>
<a href="{{ url_for('home') }}" class="btn btn-secondary">Return Home</a>
</div>
@@ -102,11 +102,11 @@
<div class="form-actions">
{% if is_super_admin %}
<a href="{{ url_for('companies.admin_company') }}" class="btn btn-secondary">
Back to Dashboard
<i class="ti ti-arrow-left"></i> Back to Dashboard
</a>
{% endif %}
<button type="submit" class="btn btn-success">
🚀 {% if is_initial_setup %}Create Company & Admin Account{% else %}Create New Company{% endif %}
<i class="ti ti-rocket"></i> {% if is_initial_setup %}Create Company & Admin Account{% else %}Create New Company{% endif %}
</button>
</div>
</form>

View File

@@ -6,7 +6,7 @@
<h1>{{ "Edit" if announcement else "Create" }} Announcement</h1>
<p class="subtitle">{{ "Update" if announcement else "Create new" }} system announcement for users</p>
<a href="{{ url_for('announcements.index') }}" class="btn btn-secondary">
Back to Announcements
<i class="ti ti-arrow-left"></i> Back to Announcements
</a>
</div>

View File

@@ -5,7 +5,7 @@
<div class="management-header">
<h1>🎨 Branding Settings</h1>
<div class="management-actions">
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary"> Back to Dashboard</a>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary"><i class="ti ti-arrow-left"></i> Back to Dashboard</a>
</div>
</div>
@@ -43,7 +43,7 @@
<!-- Branding Settings Form -->
<div class="management-section">
<h2>🔧 Branding Configuration</h2>
<h2><i class="ti ti-tool"></i> Branding Configuration</h2>
<div class="management-card">
<form method="POST" enctype="multipart/form-data" class="settings-form">
<!-- Application Name -->

View File

@@ -3,11 +3,11 @@
{% block content %}
<div class="container">
<div class="header-section">
<h1>🏢 System Admin - All Companies</h1>
<h1><i class="ti ti-building"></i> System Admin - All Companies</h1>
<p class="subtitle">Manage companies across the entire system</p>
<div class="header-actions">
<a href="/setup" class="btn btn-md btn-success">+ Add New Company</a>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-md btn-secondary"> Back to Dashboard</a>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-md btn-secondary"><i class="ti ti-arrow-left"></i> Back to Dashboard</a>
</div>
</div>
@@ -75,7 +75,7 @@
<div class="pagination-section">
<div class="pagination">
{% if companies.has_prev %}
<a href="{{ url_for('system_admin.system_admin_companies', page=companies.prev_num) }}" class="page-link"> Previous</a>
<a href="{{ url_for('system_admin.system_admin_companies', page=companies.prev_num) }}" class="page-link"><i class="ti ti-arrow-left"></i> Previous</a>
{% endif %}
{% for page_num in companies.iter_pages() %}
@@ -91,7 +91,7 @@
{% endfor %}
{% if companies.has_next %}
<a href="{{ url_for('system_admin.system_admin_companies', page=companies.next_num) }}" class="page-link">Next </a>
<a href="{{ url_for('system_admin.system_admin_companies', page=companies.next_num) }}" class="page-link">Next <i class="ti ti-arrow-right"></i></a>
{% endif %}
</div>
@@ -111,7 +111,7 @@
<!-- Company Statistics Summary -->
<div class="summary-section">
<h3>📊 Company Summary</h3>
<h3><i class="ti ti-chart-bar"></i> Company Summary</h3>
<div class="summary-grid">
<div class="summary-card">
<h4>Total Companies</h4>

View File

@@ -3,17 +3,17 @@
{% block content %}
<div class="container">
<div class="header-section">
<h1>🏢 {{ company.name }}</h1>
<h1><i class="ti ti-building"></i> {{ company.name }}</h1>
<p class="subtitle">Company Details - System Administrator View</p>
<div class="header-actions">
<a href="{{ url_for('system_admin.system_admin_companies') }}" class="btn btn-secondary"> Back to Companies</a>
<a href="{{ url_for('system_admin.system_admin_companies') }}" class="btn btn-secondary"><i class="ti ti-arrow-left"></i> Back to Companies</a>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary">Dashboard</a>
</div>
</div>
<!-- Company Information -->
<div class="info-section">
<h3>📋 Company Information</h3>
<h3><i class="ti ti-clipboard-list"></i> Company Information</h3>
<div class="info-grid">
<div class="info-item">
<label>Company Name:</label>
@@ -58,7 +58,7 @@
<!-- Statistics Overview -->
<div class="stats-section">
<h3>📊 Company Statistics</h3>
<h3><i class="ti ti-chart-bar"></i> Company Statistics</h3>
<div class="stats-grid">
<div class="stat-card">
<h4>{{ users|length }}</h4>
@@ -83,7 +83,7 @@
<!-- Role Distribution -->
{% if role_counts %}
<div class="role-section">
<h3>👥 Role Distribution</h3>
<h3><i class="ti ti-users"></i> Role Distribution</h3>
<div class="role-grid">
{% for role, count in role_counts.items() %}
<div class="role-card">
@@ -122,7 +122,7 @@
{% if users|length > 10 %}
<div class="list-more">
<a href="{{ url_for('users.system_admin_users', company=company.id) }}" class="btn btn-sm btn-outline">
View All {{ users|length }} Users
View All {{ users|length }} Users <i class="ti ti-arrow-right"></i>
</a>
</div>
{% endif %}
@@ -196,7 +196,7 @@
<h3>🛠️ Management Actions</h3>
<div class="actions-grid">
<a href="{{ url_for('users.system_admin_users', company=company.id) }}" class="action-card">
<div class="action-icon">👥</div>
<div class="action-icon"><i class="ti ti-users"></i></div>
<div class="action-content">
<h4>Manage Users</h4>
<p>View and edit all users in this company</p>
@@ -214,7 +214,7 @@
<!-- Danger Zone -->
<div class="danger-section">
<h3>⚠️ Danger Zone</h3>
<h3><i class="ti ti-alert-triangle"></i> Danger Zone</h3>
<div class="danger-content">
<p><strong>Delete Company</strong></p>
<p>Once you delete a company, there is no going back. This will permanently delete:</p>

View File

@@ -2,22 +2,22 @@
{% block content %}
<div class="container">
<h1>🔧 System Administrator Dashboard</h1>
<h1><i class="ti ti-tool"></i> System Administrator Dashboard</h1>
<p class="subtitle">Global system overview and management tools</p>
<!-- System Overview Statistics -->
<div class="stats-section">
<h2>📊 System Overview</h2>
<h2><i class="ti ti-chart-bar"></i> System Overview</h2>
<div class="stats-grid">
<div class="stat-card">
<h3>{{ total_companies }}</h3>
<p>Total Companies</p>
<a href="{{ url_for('system_admin.system_admin_companies') }}" class="stat-link">Manage </a>
<a href="{{ url_for('system_admin.system_admin_companies') }}" class="stat-link">Manage <i class="ti ti-arrow-right"></i></a>
</div>
<div class="stat-card">
<h3>{{ total_users }}</h3>
<p>Total Users</p>
<a href="{{ url_for('users.system_admin_users') }}" class="stat-link">Manage </a>
<a href="{{ url_for('users.system_admin_users') }}" class="stat-link">Manage <i class="ti ti-arrow-right"></i></a>
</div>
<div class="stat-card">
<h3>{{ total_teams }}</h3>
@@ -30,14 +30,14 @@
<div class="stat-card">
<h3>{{ total_time_entries }}</h3>
<p>Time Entries</p>
<a href="{{ url_for('system_admin.system_admin_time_entries') }}" class="stat-link">View </a>
<a href="{{ url_for('system_admin.system_admin_time_entries') }}" class="stat-link">View <i class="ti ti-arrow-right"></i></a>
</div>
</div>
</div>
<!-- Administrator Statistics -->
<div class="stats-section">
<h2>👤 Administrator Overview</h2>
<h2><i class="ti ti-user"></i> Administrator Overview</h2>
<div class="stats-grid">
<div class="stat-card">
<h3>{{ system_admins }}</h3>
@@ -51,7 +51,7 @@
<h3>{{ blocked_users }}</h3>
<p>Blocked Users</p>
{% if blocked_users > 0 %}
<a href="{{ url_for('users.system_admin_users', filter='blocked') }}" class="stat-link">Review </a>
<a href="{{ url_for('users.system_admin_users', filter='blocked') }}" class="stat-link">Review <i class="ti ti-arrow-right"></i></a>
{% endif %}
</div>
</div>
@@ -59,7 +59,7 @@
<!-- Recent Activity -->
<div class="stats-section">
<h2>📈 Recent Activity (Last 7 Days)</h2>
<h2><i class="ti ti-trending-up"></i> Recent Activity (Last 7 Days)</h2>
<div class="stats-grid">
<div class="stat-card">
<h3>{{ recent_users }}</h3>
@@ -79,7 +79,7 @@
<!-- System Health -->
{% if orphaned_users > 0 or orphaned_time_entries > 0 %}
<div class="stats-section alert-section">
<h2>⚠️ System Health Issues</h2>
<h2><i class="ti ti-alert-triangle"></i> System Health Issues</h2>
<div class="stats-grid">
{% if orphaned_users > 0 %}
<div class="stat-card alert-card">
@@ -102,7 +102,7 @@
<div class="dashboard-grid">
<!-- Top Companies -->
<div class="dashboard-card">
<h3>🏢 Top Companies by Users</h3>
<h3><i class="ti ti-building"></i> Top Companies by Users</h3>
{% if top_companies %}
<table class="table">
<thead>
@@ -131,7 +131,7 @@
<!-- Recent Companies -->
<div class="dashboard-card">
<h3>🆕 Recent Companies</h3>
<h3><i class="ti ti-sparkles"></i> Recent Companies</h3>
{% if recent_companies_list %}
<table class="table">
<thead>
@@ -169,25 +169,25 @@
<!-- Management Actions -->
<div class="admin-panel">
<h2>🛠️ System Management</h2>
<h2><i class="ti ti-settings"></i> System Management</h2>
<div class="admin-actions">
<a href="{{ url_for('users.system_admin_users') }}" class="btn btn-primary">
👥 Manage All Users
<i class="ti ti-users"></i> Manage All Users
</a>
<a href="{{ url_for('system_admin.system_admin_companies') }}" class="btn btn-primary">
🏢 Manage Companies
<i class="ti ti-building"></i> Manage Companies
</a>
<a href="{{ url_for('system_admin.system_admin_time_entries') }}" class="btn btn-primary">
⏱️ View Time Entries
<i class="ti ti-clock"></i> View Time Entries
</a>
<a href="{{ url_for('system_admin.system_admin_settings') }}" class="btn btn-primary">
⚙️ System Settings
<i class="ti ti-settings"></i> System Settings
</a>
<a href="{{ url_for('system_admin.branding') }}" class="btn btn-primary">
🎨 Branding Settings
<i class="ti ti-palette"></i> Branding Settings
</a>
<a href="{{ url_for('system_admin.system_admin_health') }}" class="btn btn-primary">
🏥 System Health
<i class="ti ti-heart-rate-monitor"></i> System Health
</a>
</div>
</div>

View File

@@ -5,7 +5,7 @@
<div class="header-section">
<h1>✏️ Edit User: {{ user.username }}</h1>
<p class="subtitle">System Administrator - Edit user across companies</p>
<a href="{{ url_for('users.system_admin_users') }}" class="btn btn-secondary"> Back to Users</a>
<a href="{{ url_for('users.system_admin_users') }}" class="btn btn-secondary"><i class="ti ti-arrow-left"></i> Back to Users</a>
</div>
<div class="form-container">

View File

@@ -3,23 +3,23 @@
{% block content %}
<div class="container">
<div class="header-section">
<h1>🏥 System Health Check</h1>
<h1><i class="ti ti-heart-rate-monitor"></i> System Health Check</h1>
<p class="subtitle">System diagnostics and event monitoring</p>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary"> Back to Dashboard</a>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary"><i class="ti ti-arrow-left"></i> Back to Dashboard</a>
</div>
<!-- System Health Status -->
<div class="health-status-section">
<h2>🔍 System Status</h2>
<h2><i class="ti ti-search"></i> System Status</h2>
<div class="health-cards">
<div class="health-card {% if health_summary.health_status == 'healthy' %}healthy{% elif health_summary.health_status == 'issues' %}warning{% else %}critical{% endif %}">
<div class="health-icon">
{% if health_summary.health_status == 'healthy' %}
<i class="ti ti-circle-check" style="font-size: 2rem; color: #10b981;"></i>
{% elif health_summary.health_status == 'issues' %}
⚠️
<i class="ti ti-alert-triangle" style="font-size: 2rem; color: #f59e0b;"></i>
{% else %}
<i class="ti ti-circle-x" style="font-size: 2rem; color: #ef4444;"></i>
{% endif %}
</div>
<div class="health-info">
@@ -39,7 +39,7 @@
<div class="health-card {% if db_healthy %}healthy{% else %}critical{% endif %}">
<div class="health-icon">
{% if db_healthy %}✅{% else %}❌{% endif %}
{% if db_healthy %}<i class="ti ti-circle-check" style="font-size: 2rem; color: #10b981;"></i>{% else %}<i class="ti ti-circle-x" style="font-size: 2rem; color: #ef4444;"></i>{% endif %}
</div>
<div class="health-info">
<h3>Database</h3>
@@ -55,7 +55,7 @@
</div>
<div class="health-card info">
<div class="health-icon">⏱️</div>
<div class="health-icon"><i class="ti ti-clock" style="font-size: 2rem;"></i></div>
<div class="health-info">
<h3>Uptime</h3>
<p class="health-status">{{ uptime_duration.days }}d {{ uptime_duration.seconds//3600 }}h {{ (uptime_duration.seconds//60)%60 }}m</p>
@@ -67,7 +67,7 @@
<!-- Quick Stats -->
<div class="stats-section">
<h2>📊 Event Statistics</h2>
<h2><i class="ti ti-chart-bar"></i> Event Statistics</h2>
<div class="stats-grid">
<div class="stat-card {% if health_summary.errors_24h > 0 %}error{% endif %}">
<h3>{{ health_summary.errors_24h }}</h3>
@@ -91,7 +91,7 @@
<!-- Recent Errors -->
{% if errors %}
<div class="events-section error-section">
<h2>🚨 Recent Errors</h2>
<h2><i class="ti ti-alert-circle"></i> Recent Errors</h2>
<div class="events-list">
{% for error in errors %}
<div class="event-item error">
@@ -115,7 +115,7 @@
<!-- Recent Warnings -->
{% if warnings %}
<div class="events-section warning-section">
<h2>⚠️ Recent Warnings</h2>
<h2><i class="ti ti-alert-triangle"></i> Recent Warnings</h2>
<div class="events-list">
{% for warning in warnings %}
<div class="event-item warning">
@@ -138,7 +138,7 @@
<!-- System Event Log -->
<div class="events-section">
<h2>📋 System Event Log (Last 7 Days)</h2>
<h2><i class="ti ti-clipboard-list"></i> System Event Log (Last 7 Days)</h2>
<div class="events-controls">
<button class="filter-btn active" data-filter="all">All Events</button>
<button class="filter-btn" data-filter="auth">Authentication</button>

View File

@@ -5,7 +5,7 @@
<div class="header-section">
<h1>⚙️ System Administrator Settings</h1>
<p class="subtitle">Global system configuration and management</p>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary"> Back to Dashboard</a>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary"><i class="ti ti-arrow-left"></i> Back to Dashboard</a>
</div>
<!-- System Statistics -->
@@ -168,7 +168,7 @@
<h3>🚀 Quick Actions</h3>
<div class="actions-grid">
<a href="{{ url_for('users.system_admin_users') }}" class="action-card">
<div class="action-icon">👥</div>
<div class="action-icon"><i class="ti ti-users"></i></div>
<div class="action-content">
<h4>Manage All Users</h4>
<p>View, edit, and manage users across all companies</p>

View File

@@ -5,7 +5,7 @@
<div class="header-section">
<h1>⏱️ System Admin - Time Entries</h1>
<p class="subtitle">View time entries across all companies</p>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary"> Back to Dashboard</a>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary"><i class="ti ti-arrow-left"></i> Back to Dashboard</a>
</div>
<!-- Filter Section -->
@@ -112,7 +112,7 @@
<div class="pagination-section">
<div class="pagination">
{% if entries.has_prev %}
<a href="{{ url_for('system_admin.system_admin_time_entries', page=entries.prev_num, company=current_company) }}" class="page-link"> Previous</a>
<a href="{{ url_for('system_admin.system_admin_time_entries', page=entries.prev_num, company=current_company) }}" class="page-link"><i class="ti ti-arrow-left"></i> Previous</a>
{% endif %}
{% for page_num in entries.iter_pages() %}
@@ -128,7 +128,7 @@
{% endfor %}
{% if entries.has_next %}
<a href="{{ url_for('system_admin.system_admin_time_entries', page=entries.next_num, company=current_company) }}" class="page-link">Next </a>
<a href="{{ url_for('system_admin.system_admin_time_entries', page=entries.next_num, company=current_company) }}" class="page-link">Next <i class="ti ti-arrow-right"></i></a>
{% endif %}
</div>

View File

@@ -3,9 +3,9 @@
{% block content %}
<div class="container">
<div class="header-section">
<h1>👥 System Admin - All Users</h1>
<h1><i class="ti ti-users"></i> System Admin - All Users</h1>
<p class="subtitle">Manage users across all companies</p>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-md btn-secondary"> Back to Dashboard</a>
<a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-md btn-secondary"><i class="ti ti-arrow-left"></i> Back to Dashboard</a>
</div>
<!-- Filter Options -->
@@ -124,7 +124,7 @@
<div class="pagination-section">
<div class="pagination">
{% if users.has_prev %}
<a href="{{ url_for('users.system_admin_users', page=users.prev_num, filter=current_filter) }}" class="page-link"> Previous</a>
<a href="{{ url_for('users.system_admin_users', page=users.prev_num, filter=current_filter) }}" class="page-link"><i class="ti ti-arrow-left"></i> Previous</a>
{% endif %}
{% for page_num in users.iter_pages() %}
@@ -140,7 +140,7 @@
{% endfor %}
{% if users.has_next %}
<a href="{{ url_for('users.system_admin_users', page=users.next_num, filter=current_filter) }}" class="page-link">Next </a>
<a href="{{ url_for('users.system_admin_users', page=users.next_num, filter=current_filter) }}" class="page-link">Next <i class="ti ti-arrow-right"></i></a>
{% endif %}
</div>

View File

@@ -11,7 +11,7 @@
<!-- Basic Information -->
<div class="form-section">
<h3>📝 Basic Information</h3>
<h3><i class="ti ti-file-text"></i> Basic Information</h3>
<div class="form-row">
<div class="form-group">
<label for="task-name">Task Name *</label>
@@ -48,7 +48,7 @@
<!-- Assignment & Planning -->
<div class="form-section">
<h3>👥 Assignment & Planning</h3>
<h3><i class="ti ti-users"></i> Assignment & Planning</h3>
<div class="form-row">
<div class="form-group">
<label for="task-project">Project</label>
@@ -89,7 +89,7 @@
<div class="hybrid-date-input">
<input type="date" id="task-due-date-native" class="date-input-native">
<input type="text" id="task-due-date" class="date-input-formatted" placeholder="{{ "YYYY-MM-DD" if (g.user.preferences.date_format if g.user.preferences else "ISO") == "ISO" else "MM/DD/YYYY" if (g.user.preferences.date_format if g.user.preferences else "ISO") == "US" else "DD/MM/YYYY" if (g.user.preferences.date_format if g.user.preferences else "ISO") in ["EU", "UK"] else "Mon, Dec 25, 2024" }}">
<button type="button" class="calendar-picker-btn" onclick="openCalendarPicker('task-due-date')" title="Open calendar">📅</button>
<button type="button" class="calendar-picker-btn" onclick="openCalendarPicker('task-due-date')" title="Open calendar"><i class="ti ti-calendar"></i></button>
</div>
<div class="date-error" id="task-due-date-error" style="display: none; color: #dc3545; font-size: 0.8rem; margin-top: 0.25rem;"></div>
</div>
@@ -97,11 +97,11 @@
<!-- Dependencies -->
<div class="form-section">
<h3>🔗 Dependencies</h3>
<h3><i class="ti ti-link"></i> Dependencies</h3>
<div class="dependencies-grid">
<!-- Blocked By -->
<div class="dependency-column">
<h4>🚫 Blocked By</h4>
<h4><i class="ti ti-ban"></i> Blocked By</h4>
<p class="dependency-help">Tasks that must be completed before this task can start</p>
<div id="blocked-by-container" class="dependency-list">
<!-- Blocked by tasks will be populated here -->
@@ -114,7 +114,7 @@
<!-- Blocks -->
<div class="dependency-column">
<h4>🔒 Blocks</h4>
<h4><i class="ti ti-lock"></i> Blocks</h4>
<p class="dependency-help">Tasks that cannot start until this task is completed</p>
<div id="blocks-container" class="dependency-list">
<!-- Blocks tasks will be populated here -->
@@ -129,17 +129,17 @@
<!-- Subtasks -->
<div class="form-section">
<h3>📋 Subtasks</h3>
<h3><i class="ti ti-clipboard-list"></i> Subtasks</h3>
<div id="subtasks-container">
<!-- Subtasks will be populated here -->
</div>
<button type="button" class="btn btn-sm btn-secondary" onclick="addSubtask()">+ Add Subtask</button>
<button type="button" class="btn btn-sm btn-secondary" onclick="addSubtask()"><i class="ti ti-plus"></i> Add Subtask</button>
</div>
</form>
<!-- Comments Section (outside form) -->
<div class="form-section" id="comments-section" style="display: none;">
<h3>💬 Comments</h3>
<h3><i class="ti ti-message-circle"></i> Comments</h3>
<div id="comments-container">
<!-- Comments will be populated here -->
</div>
@@ -147,8 +147,8 @@
<textarea id="new-comment" placeholder="Add a comment..." rows="2"></textarea>
<div class="comment-form-actions">
<select id="comment-visibility" class="comment-visibility-select" style="display: none;">
<option value="COMPANY">🏢 Company</option>
<option value="TEAM">👥 Team Only</option>
<option value="COMPANY"><i class="ti ti-building"></i> Company</option>
<option value="TEAM"><i class="ti ti-users"></i> Team Only</option>
</select>
<button type="button" class="btn btn-sm btn-primary" onclick="addComment()">Post Comment</button>
</div>

View File

@@ -7,7 +7,7 @@
<div class="header-content">
<div class="header-left">
<h1 class="page-title">
<span class="team-icon">👥</span>
<span class="team-icon"><i class="ti ti-users"></i></span>
{% if team %}
{{ team.name }}
{% else %}
@@ -24,7 +24,7 @@
</div>
<div class="header-actions">
<a href="{{ url_for('teams.admin_teams') }}" class="btn btn-outline">
<i class="icon"></i> Back to Teams
<i class="ti ti-arrow-left"></i> Back to Teams
</a>
</div>
</div>
@@ -158,7 +158,7 @@
</div>
{% else %}
<div class="empty-state">
<div class="empty-icon">👥</div>
<div class="empty-icon"><i class="ti ti-users"></i></div>
<p class="empty-message">No members in this team yet</p>
<p class="empty-hint">Add members using the form below</p>
</div>

View File

@@ -7,18 +7,18 @@
<div class="header-content">
<div class="header-left">
<h1 class="page-title">
<span class="page-icon">⏱️</span>
<i class="ti ti-clock page-icon"></i>
Time Tracking
</h1>
<p class="page-subtitle">Track your work hours efficiently</p>
</div>
<div class="header-actions">
<button id="manual-entry-btn" class="btn btn-secondary">
<span class="icon">📝</span>
<i class="ti ti-pencil"></i>
Manual Entry
</button>
<a href="{{ url_for('analytics') }}" class="btn btn-secondary">
<span class="icon">📊</span>
<i class="ti ti-chart-bar"></i>
View Analytics
</a>
</div>
@@ -96,15 +96,15 @@
<button id="pause-btn" class="btn {% if active_entry.is_paused %}btn-success{% else %}btn-warning{% endif %}"
data-id="{{ active_entry.id }}">
{% if active_entry.is_paused %}
<span class="icon">▶️</span>
<i class="ti ti-player-play"></i>
Resume Work
{% else %}
<span class="icon">⏸️</span>
<i class="ti ti-player-pause"></i>
Take Break
{% endif %}
</button>
<button id="leave-btn" class="btn btn-danger" data-id="{{ active_entry.id }}">
<span class="icon">⏹️</span>
<i class="ti ti-player-stop"></i>
Stop Working
</button>
</div>
@@ -152,7 +152,7 @@
<div class="form-actions">
<button type="submit" id="arrive-btn" class="btn btn-primary btn-large">
<span class="icon">▶️</span>
<i class="ti ti-player-play"></i>
Start Working
</button>
</div>
@@ -186,16 +186,16 @@
<div class="entries-section">
<div class="section-header">
<h2 class="section-title">
<span class="icon">📋</span>
<i class="ti ti-clipboard-list"></i>
Recent Time Entries
</h2>
<div class="view-toggle">
<button class="toggle-btn active" data-view="list">
<span class="icon">📝</span>
<i class="ti ti-list"></i>
List
</button>
<button class="toggle-btn" data-view="grid">
<span class="icon">📊</span>
<i class="ti ti-layout-grid"></i>
Grid
</button>
</div>
@@ -229,7 +229,7 @@
<td>
<div class="time-cell">
<span class="time-start">{{ entry.arrival_time|format_time }}</span>
<span class="time-separator"></span>
<span class="time-separator"><i class="ti ti-arrow-right"></i></span>
<span class="time-end">{{ entry.departure_time|format_time if entry.departure_time else 'Active' }}</span>
</div>
</td>
@@ -269,19 +269,19 @@
{% if entry.departure_time and not active_entry %}
{% if entry.arrival_time.date() >= today %}
<button class="btn-icon resume-work-btn" data-id="{{ entry.id }}" title="Resume">
<span class="icon">🔄</span>
<i class="ti ti-refresh"></i>
</button>
{% else %}
<button class="btn-icon resume-work-btn" data-id="{{ entry.id }}" title="Cannot resume entries from previous days" disabled style="opacity: 0.5; cursor: not-allowed;">
<span class="icon">🔄</span>
<i class="ti ti-refresh"></i>
</button>
{% endif %}
{% endif %}
<button class="btn-icon edit-entry-btn" data-id="{{ entry.id }}" title="Edit">
<span class="icon">✏️</span>
<i class="ti ti-pencil"></i>
</button>
<button class="btn-icon delete-entry-btn" data-id="{{ entry.id }}" title="Delete">
<span class="icon">🗑️</span>
<i class="ti ti-trash"></i>
</button>
</div>
</td>
@@ -292,7 +292,7 @@
</div>
{% else %}
<div class="empty-state">
<div class="empty-icon">📭</div>
<div class="empty-icon"><i class="ti ti-mail-opened" style="font-size: 4rem;"></i></div>
<h3>No time entries yet</h3>
<p>Start tracking your time to see entries here</p>
</div>
@@ -322,18 +322,18 @@
{% if entry.task %}
<div class="entry-task">
<span class="icon">📋</span> {{ entry.task.title }}
<i class="ti ti-clipboard-list"></i> {{ entry.task.title }}
</div>
{% endif %}
<div class="entry-time">
<span class="icon">🕐</span>
<i class="ti ti-clock"></i>
{{ entry.arrival_time|format_time }} - {{ entry.departure_time|format_time if entry.departure_time else 'Active' }}
</div>
{% if entry.notes %}
<div class="entry-notes">
<span class="icon">📝</span>
<i class="ti ti-notes"></i>
{{ entry.notes }}
</div>
{% endif %}

View File

@@ -4,7 +4,7 @@
<div class="management-container task-management-container">
<!-- Header Section -->
<div class="management-header task-header">
<h1>📋 Task Management</h1>
<h1><i class="ti ti-clipboard-list"></i> Task Management</h1>
<div class="management-controls task-controls">
<!-- Smart Search -->
<div class="smart-search-container">
@@ -19,9 +19,9 @@
<!-- Actions -->
<div class="management-actions task-actions">
<button id="add-task-btn" class="btn btn-primary">+ Add Task</button>
<button id="refresh-tasks" class="btn btn-secondary">🔄 Refresh</button>
<button id="toggle-archived" class="btn btn-outline" title="Show/Hide Archived Tasks">📦 Show Archived</button>
<button id="add-task-btn" class="btn btn-primary"><i class="ti ti-plus"></i> Add Task</button>
<button id="refresh-tasks" class="btn btn-secondary"><i class="ti ti-refresh"></i> Refresh</button>
<button id="toggle-archived" class="btn btn-outline" title="Show/Hide Archived Tasks"><i class="ti ti-archive"></i> Show Archived</button>
</div>
</div>
</div>
@@ -54,7 +54,7 @@
<div class="task-board" id="task-board">
<div class="task-column" data-status="TODO">
<div class="column-header">
<h3>📝 To Do</h3>
<h3><i class="ti ti-circle"></i> To Do</h3>
<span class="task-count">0</span>
</div>
<div class="column-content" id="column-TODO">
@@ -64,7 +64,7 @@
<div class="task-column" data-status="IN_PROGRESS">
<div class="column-header">
<h3> In Progress</h3>
<h3><i class="ti ti-player-play"></i> In Progress</h3>
<span class="task-count">0</span>
</div>
<div class="column-content" id="column-IN_PROGRESS">
@@ -74,7 +74,7 @@
<div class="task-column" data-status="IN_REVIEW">
<div class="column-header">
<h3>🔍 In Review</h3>
<h3><i class="ti ti-eye"></i> In Review</h3>
<span class="task-count">0</span>
</div>
<div class="column-content" id="column-IN_REVIEW">
@@ -84,7 +84,7 @@
<div class="task-column" data-status="DONE">
<div class="column-header">
<h3> Done</h3>
<h3><i class="ti ti-circle-check"></i> Done</h3>
<span class="task-count">0</span>
</div>
<div class="column-content" id="column-DONE">
@@ -94,7 +94,7 @@
<div class="task-column" data-status="CANCELLED">
<div class="column-header">
<h3> Cancelled</h3>
<h3><i class="ti ti-circle-x"></i> Cancelled</h3>
<span class="task-count">0</span>
</div>
<div class="column-content" id="column-CANCELLED">
@@ -104,7 +104,7 @@
<div class="task-column archived-column" data-status="ARCHIVED" style="display: none;">
<div class="column-header">
<h3>📦 Archived</h3>
<h3><i class="ti ti-archive"></i> Archived</h3>
<span class="task-count">0</span>
</div>
<div class="column-content" id="column-ARCHIVED">
@@ -1644,13 +1644,13 @@ class UnifiedTaskManager {
if (task.status === 'COMPLETED') {
actionButtons = `
<div class="task-actions">
<button class="archive-btn" onclick="taskManager.archiveTask(${task.id}); event.stopPropagation();" title="Archive Task">📦</button>
<button class="archive-btn" onclick="taskManager.archiveTask(${task.id}); event.stopPropagation();" title="Archive Task"><i class="ti ti-archive"></i></button>
</div>
`;
} else if (task.status === 'ARCHIVED') {
actionButtons = `
<div class="task-actions">
<button class="restore-btn" onclick="taskManager.restoreTask(${task.id}); event.stopPropagation();" title="Restore Task">↩️</button>
<button class="restore-btn" onclick="taskManager.restoreTask(${task.id}); event.stopPropagation();" title="Restore Task"><i class="ti ti-arrow-back-up"></i></button>
</div>
`;
}
@@ -1727,12 +1727,12 @@ class UnifiedTaskManager {
const archivedStatCard = document.getElementById('archived-stat-card');
if (this.showArchived) {
toggleBtn.textContent = '📦 Hide Archived';
toggleBtn.innerHTML = '<i class="ti ti-archive"></i> Hide Archived';
toggleBtn.classList.add('active');
archivedColumn.style.display = 'block';
archivedStatCard.style.display = 'block';
} else {
toggleBtn.textContent = '📦 Show Archived';
toggleBtn.innerHTML = '<i class="ti ti-archive"></i> Show Archived';
toggleBtn.classList.remove('active');
archivedColumn.style.display = 'none';
archivedStatCard.style.display = 'none';
@@ -2141,7 +2141,7 @@ class UnifiedTaskManager {
element.dataset.commentId = comment.id;
const visibilityBadge = comment.visibility === 'Team' ?
'<span class="comment-visibility-badge team">👥 Team</span>' : '';
'<span class="comment-visibility-badge team"><i class="ti ti-users"></i> Team</span>' : '';
const editedText = comment.is_edited ?
` <span class="comment-edited">(edited)</span>` : '';

View File

@@ -22,7 +22,7 @@
<div class="help-section">
<p><small>Having trouble? Make sure your device's time is synchronized and try a new code.</small></p>
<p><small><a href="{{ url_for('login') }}"> Back to Login</a></small></p>
<p><small><a href="{{ url_for('login') }}"><i class="ti ti-arrow-left"></i> Back to Login</a></small></p>
</div>
</div>
</div>