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 { .company-code-group::before {
content: '🏢'; content: '\eebe'; /* Tabler icon building */
font-family: 'tabler-icons';
position: absolute; position: absolute;
left: 1rem; left: 1rem;
top: 2.5rem; /* Position below the label */ top: 2.5rem; /* Position below the label */

View File

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

View File

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

View File

@@ -23,17 +23,17 @@
</div> </div>
<div class="feature-item"> <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> <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>
<div class="feature-item"> <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> <p>View detailed time entry history, team performance metrics, and individual productivity reports. Export data for payroll and project management purposes.</p>
</div> </div>
<div class="feature-item"> <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> <p>Customize work hour requirements, mandatory break durations, and threshold settings to match your organization's policies and labor regulations.</p>
</div> </div>
@@ -80,22 +80,22 @@
<div class="benefits-list"> <div class="benefits-list">
<div class="benefit"> <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> <p>Automatically enforces break policies and work hour regulations to help your organization stay compliant with labor laws.</p>
</div> </div>
<div class="benefit"> <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> <p>Intuitive interface requires minimal training. Start tracking time immediately without complicated setup procedures.</p>
</div> </div>
<div class="benefit"> <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> <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>
<div class="benefit"> <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> <p>Generate meaningful reports and analytics to optimize productivity, identify trends, and make informed business decisions.</p>
</div> </div>
</div> </div>
@@ -115,7 +115,7 @@
</div> </div>
<div class="setup-option"> <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> <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>
</div> </div>

View File

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

View File

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

View File

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

View File

@@ -230,7 +230,7 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<p>Are you sure you want to delete user <strong id="delete-username"></strong>?</p> <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>
<div class="modal-footer"> <div class="modal-footer">
<form id="delete-form" method="POST"> <form id="delete-form" method="POST">

View File

@@ -3,7 +3,7 @@
{% block content %} {% block content %}
<div class="page-container timetrack-container"> <div class="page-container timetrack-container">
<div class="page-header analytics-header"> <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"> <div class="mode-switcher">
<button class="mode-btn {% if mode == 'personal' %}active{% endif %}" <button class="mode-btn {% if mode == 'personal' %}active{% endif %}"
onclick="switchMode('personal')">Personal</button> onclick="switchMode('personal')">Personal</button>
@@ -43,10 +43,10 @@
<!-- View Tabs --> <!-- View Tabs -->
<div class="view-tabs"> <div class="view-tabs">
<button class="tab-btn active" data-view="table">📋 Table 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">📈 Graph View</button> <button class="tab-btn" data-view="graph"><i class="ti ti-trending-up"></i> Graph View</button>
{% if mode == 'team' %} {% 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 %} {% endif %}
</div> </div>

View File

@@ -61,7 +61,7 @@
<td> <td>
{{ user.username }} {{ user.username }}
{% if user.two_factor_enabled %} {% 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 %} {% endif %}
</td> </td>
<td>{{ user.email }}</td> <td>{{ user.email }}</td>
@@ -112,7 +112,7 @@
<!-- Navigation --> <!-- Navigation -->
<div class="admin-section"> <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>
</div> </div>

View File

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

View File

@@ -3,10 +3,10 @@
{% block content %} {% block content %}
<div class="admin-container"> <div class="admin-container">
<div class="header-section"> <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> <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') }}" <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>
<div class="alert alert-danger"> <div class="alert alert-danger">
@@ -21,7 +21,7 @@
<!-- Company Information --> <!-- Company Information -->
<div class="table-section"> <div class="table-section">
<h3>🏢 Company Information</h3> <h3><i class="ti ti-building"></i> Company Information</h3>
<table class="data-table"> <table class="data-table">
<tr> <tr>
<th>Company Name:</th> <th>Company Name:</th>
@@ -45,7 +45,7 @@
<!-- Users --> <!-- Users -->
{% if users %} {% if users %}
<div class="table-section"> <div class="table-section">
<h3>👥 Users ({{ users|length }})</h3> <h3><i class="ti ti-users"></i> Users ({{ users|length }})</h3>
<table class="data-table"> <table class="data-table">
<thead> <thead>
<tr> <tr>
@@ -83,7 +83,7 @@
<!-- Teams --> <!-- Teams -->
{% if teams %} {% if teams %}
<div class="table-section"> <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"> <table class="data-table">
<thead> <thead>
<tr> <tr>
@@ -141,7 +141,7 @@
<!-- Tasks --> <!-- Tasks -->
{% if tasks %} {% if tasks %}
<div class="table-section"> <div class="table-section">
<h3> Tasks ({{ tasks|length }})</h3> <h3><i class="ti ti-check"></i> Tasks ({{ tasks|length }})</h3>
<table class="data-table"> <table class="data-table">
<thead> <thead>
<tr> <tr>

View File

@@ -21,7 +21,7 @@
<!-- Empty Dashboard Message --> <!-- Empty Dashboard Message -->
<div id="empty-dashboard" class="empty-dashboard" style="display: none;"> <div id="empty-dashboard" class="empty-dashboard" style="display: none;">
<div class="empty-dashboard-content"> <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> <h3>Your Dashboard is Empty</h3>
<p>Add widgets to create your personalized dashboard.</p> <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> <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) --> <!-- Danger Zone (only for admins) -->
{% if g.user.role in [Role.ADMIN, Role.SYSTEM_ADMIN] %} {% if g.user.role in [Role.ADMIN, Role.SYSTEM_ADMIN] %}
<div class="danger-zone"> <div class="danger-zone">
<h3>⚠️ Danger Zone</h3> <h3><i class="ti ti-alert-triangle"></i> Danger Zone</h3>
<div class="danger-content"> <div class="danger-content">
<p><strong>Delete Project</strong></p> <p><strong>Delete Project</strong></p>
<p>Once you delete a project, there is no going back. This will permanently delete:</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>
<div class="imprint-footer"> <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> </div>
</div> </div>

View File

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

View File

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

View File

@@ -14,7 +14,7 @@
</div> </div>
<div class="header-actions"> <div class="header-actions">
<a href="{{ url_for('invitations.list_invitations') }}" class="btn btn-secondary"> <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 Back to Invitations
</a> </a>
</div> </div>
@@ -26,7 +26,7 @@
<div class="card invitation-form-card"> <div class="card invitation-form-card">
<div class="card-header"> <div class="card-header">
<h2 class="card-title"> <h2 class="card-title">
<span class="icon">👥</span> <span class="icon"><i class="ti ti-users"></i></span>
Invitation Details Invitation Details
</h2> </h2>
</div> </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> <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/fonts.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.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 %} {% if not g.user %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/splash.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename='css/splash.css') }}">
{% endif %} {% endif %}
@@ -25,7 +26,7 @@
border-color: {{ (g.branding.primary_color if g.branding else '#007bff') + 'dd' }}; border-color: {{ (g.branding.primary_color if g.branding else '#007bff') + 'dd' }};
} }
.nav-icon { .nav-icon {
color: var(--primary-color); color: rgb(116, 85, 175) /* var(--primary-color); */
} }
a:hover { a:hover {
color: var(--primary-color); color: var(--primary-color);
@@ -116,10 +117,10 @@
</div> </div>
<div class="user-dropdown-menu"> <div class="user-dropdown-menu">
<ul> <ul>
<li><a href="{{ url_for('profile') }}"><i class="nav-icon">👤</i>Profile</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">⚙️</i>Settings</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 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> </ul>
</div> </div>
</div> </div>
@@ -128,38 +129,38 @@
<nav class="sidebar-nav"> <nav class="sidebar-nav">
<ul> <ul>
{% if g.user %} {% 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('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">⏱️</i><span class="nav-text">Time Tracking</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">📊</i><span class="nav-text">Dashboard</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">📋</i><span class="nav-text">Task Management</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">🏃‍♂️</i><span class="nav-text">Sprints</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">📝</i><span class="nav-text">Notes</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">📊</i><span class="nav-text">Analytics</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 --> <!-- Role-based menu items -->
{% if g.user.role == Role.ADMIN or g.user.role == Role.SYSTEM_ADMIN %} {% if g.user.role == Role.ADMIN or g.user.role == Role.SYSTEM_ADMIN %}
<li class="nav-divider">Admin</li> <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('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">👥</i><span class="nav-text">Manage Users</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">📨</i><span class="nav-text">Invitations</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">🏭</i><span class="nav-text">Manage Teams</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">📝</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>
{% if g.user.role == Role.SYSTEM_ADMIN %} {% if g.user.role == Role.SYSTEM_ADMIN %}
<li class="nav-divider">System Admin</li> <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('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">📢</i><span class="nav-text">Announcements</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 %} {% endif %}
{% elif g.user.role in [Role.TEAM_LEADER, Role.SUPERVISOR] %} {% elif g.user.role in [Role.TEAM_LEADER, Role.SUPERVISOR] %}
<li class="nav-divider">Team</li> <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 %} {% 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 %}
{% endif %} {% endif %}
{% else %} {% 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('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">🔑</i><span class="nav-text">Login</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">📝</i><span class="nav-text">Register</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 %} {% endif %}
</ul> </ul>
</nav> </nav>
@@ -210,7 +211,7 @@
{% if g.show_email_nag %} {% if g.show_email_nag %}
<div class="email-nag-banner"> <div class="email-nag-banner">
<div class="email-nag-content"> <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"> <span class="email-nag-text">
<strong>Add your email address</strong> to enable account recovery and receive important notifications. <strong>Add your email address</strong> to enable account recovery and receive important notifications.
</span> </span>
@@ -221,7 +222,7 @@
{% elif g.show_email_verification_nag %} {% elif g.show_email_verification_nag %}
<div class="email-nag-banner email-verify"> <div class="email-nag-banner email-verify">
<div class="email-nag-content"> <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"> <span class="email-nag-text">
<strong>Please verify your email address</strong> to ensure you can recover your account if needed. <strong>Please verify your email address</strong> to ensure you can recover your account if needed.
</span> </span>

View File

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

View File

@@ -30,7 +30,7 @@
Fullscreen Fullscreen
</button> </button>
<a href="{{ url_for('notes.view_note', slug=note.slug) }}" class="btn btn-secondary"> <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 Back to Note
</a> </a>
</div> </div>

View File

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

View File

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

View File

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

View File

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

View File

@@ -234,7 +234,7 @@
</div> </div>
<div class="verification-notice"> <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> </div>
</form> </form>
</div> </div>

View File

@@ -91,7 +91,7 @@
<span>Email: <strong>{{ invitation.email }}</strong></span> <span>Email: <strong>{{ invitation.email }}</strong></span>
</div> </div>
<div class="detail-item"> <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> <span>Invited by: <strong>{{ invitation.invited_by.username }}</strong></span>
</div> </div>
</div> </div>
@@ -150,7 +150,7 @@
</div> </div>
<div class="verification-notice"> <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> </div>
</form> </form>
</div> </div>

View File

@@ -13,17 +13,17 @@
<!-- Info Message --> <!-- Info Message -->
{% if is_initial_setup %} {% if is_initial_setup %}
<div class="info-message"> <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> <p>Set up your company and create the first administrator account to begin using {{ g.branding.app_name }}.</p>
</div> </div>
{% elif is_super_admin %} {% elif is_super_admin %}
<div class="info-message"> <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> <p>Create a new company with its own administrator. This will be a separate organization within {{ g.branding.app_name }}.</p>
</div> </div>
{% else %} {% else %}
<div class="error-message"> <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> <p>You do not have permission to create new companies.</p>
<a href="{{ url_for('home') }}" class="btn btn-secondary">Return Home</a> <a href="{{ url_for('home') }}" class="btn btn-secondary">Return Home</a>
</div> </div>
@@ -102,11 +102,11 @@
<div class="form-actions"> <div class="form-actions">
{% if is_super_admin %} {% if is_super_admin %}
<a href="{{ url_for('companies.admin_company') }}" class="btn btn-secondary"> <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> </a>
{% endif %} {% endif %}
<button type="submit" class="btn btn-success"> <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> </button>
</div> </div>
</form> </form>

View File

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

View File

@@ -5,7 +5,7 @@
<div class="management-header"> <div class="management-header">
<h1>🎨 Branding Settings</h1> <h1>🎨 Branding Settings</h1>
<div class="management-actions"> <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>
</div> </div>
@@ -43,7 +43,7 @@
<!-- Branding Settings Form --> <!-- Branding Settings Form -->
<div class="management-section"> <div class="management-section">
<h2>🔧 Branding Configuration</h2> <h2><i class="ti ti-tool"></i> Branding Configuration</h2>
<div class="management-card"> <div class="management-card">
<form method="POST" enctype="multipart/form-data" class="settings-form"> <form method="POST" enctype="multipart/form-data" class="settings-form">
<!-- Application Name --> <!-- Application Name -->

View File

@@ -3,11 +3,11 @@
{% block content %} {% block content %}
<div class="container"> <div class="container">
<div class="header-section"> <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> <p class="subtitle">Manage companies across the entire system</p>
<div class="header-actions"> <div class="header-actions">
<a href="/setup" class="btn btn-md btn-success">+ Add New Company</a> <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>
</div> </div>
@@ -75,7 +75,7 @@
<div class="pagination-section"> <div class="pagination-section">
<div class="pagination"> <div class="pagination">
{% if companies.has_prev %} {% 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 %} {% endif %}
{% for page_num in companies.iter_pages() %} {% for page_num in companies.iter_pages() %}
@@ -91,7 +91,7 @@
{% endfor %} {% endfor %}
{% if companies.has_next %} {% 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 %} {% endif %}
</div> </div>
@@ -111,7 +111,7 @@
<!-- Company Statistics Summary --> <!-- Company Statistics Summary -->
<div class="summary-section"> <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-grid">
<div class="summary-card"> <div class="summary-card">
<h4>Total Companies</h4> <h4>Total Companies</h4>

View File

@@ -3,17 +3,17 @@
{% block content %} {% block content %}
<div class="container"> <div class="container">
<div class="header-section"> <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> <p class="subtitle">Company Details - System Administrator View</p>
<div class="header-actions"> <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> <a href="{{ url_for('system_admin.system_admin_dashboard') }}" class="btn btn-secondary">Dashboard</a>
</div> </div>
</div> </div>
<!-- Company Information --> <!-- Company Information -->
<div class="info-section"> <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-grid">
<div class="info-item"> <div class="info-item">
<label>Company Name:</label> <label>Company Name:</label>
@@ -58,7 +58,7 @@
<!-- Statistics Overview --> <!-- Statistics Overview -->
<div class="stats-section"> <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="stats-grid">
<div class="stat-card"> <div class="stat-card">
<h4>{{ users|length }}</h4> <h4>{{ users|length }}</h4>
@@ -83,7 +83,7 @@
<!-- Role Distribution --> <!-- Role Distribution -->
{% if role_counts %} {% if role_counts %}
<div class="role-section"> <div class="role-section">
<h3>👥 Role Distribution</h3> <h3><i class="ti ti-users"></i> Role Distribution</h3>
<div class="role-grid"> <div class="role-grid">
{% for role, count in role_counts.items() %} {% for role, count in role_counts.items() %}
<div class="role-card"> <div class="role-card">
@@ -122,7 +122,7 @@
{% if users|length > 10 %} {% if users|length > 10 %}
<div class="list-more"> <div class="list-more">
<a href="{{ url_for('users.system_admin_users', company=company.id) }}" class="btn btn-sm btn-outline"> <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> </a>
</div> </div>
{% endif %} {% endif %}
@@ -196,7 +196,7 @@
<h3>🛠️ Management Actions</h3> <h3>🛠️ Management Actions</h3>
<div class="actions-grid"> <div class="actions-grid">
<a href="{{ url_for('users.system_admin_users', company=company.id) }}" class="action-card"> <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"> <div class="action-content">
<h4>Manage Users</h4> <h4>Manage Users</h4>
<p>View and edit all users in this company</p> <p>View and edit all users in this company</p>
@@ -214,7 +214,7 @@
<!-- Danger Zone --> <!-- Danger Zone -->
<div class="danger-section"> <div class="danger-section">
<h3>⚠️ Danger Zone</h3> <h3><i class="ti ti-alert-triangle"></i> Danger Zone</h3>
<div class="danger-content"> <div class="danger-content">
<p><strong>Delete Company</strong></p> <p><strong>Delete Company</strong></p>
<p>Once you delete a company, there is no going back. This will permanently delete:</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 %} {% block content %}
<div class="container"> <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> <p class="subtitle">Global system overview and management tools</p>
<!-- System Overview Statistics --> <!-- System Overview Statistics -->
<div class="stats-section"> <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="stats-grid">
<div class="stat-card"> <div class="stat-card">
<h3>{{ total_companies }}</h3> <h3>{{ total_companies }}</h3>
<p>Total Companies</p> <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>
<div class="stat-card"> <div class="stat-card">
<h3>{{ total_users }}</h3> <h3>{{ total_users }}</h3>
<p>Total Users</p> <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>
<div class="stat-card"> <div class="stat-card">
<h3>{{ total_teams }}</h3> <h3>{{ total_teams }}</h3>
@@ -30,14 +30,14 @@
<div class="stat-card"> <div class="stat-card">
<h3>{{ total_time_entries }}</h3> <h3>{{ total_time_entries }}</h3>
<p>Time Entries</p> <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> </div>
</div> </div>
<!-- Administrator Statistics --> <!-- Administrator Statistics -->
<div class="stats-section"> <div class="stats-section">
<h2>👤 Administrator Overview</h2> <h2><i class="ti ti-user"></i> Administrator Overview</h2>
<div class="stats-grid"> <div class="stats-grid">
<div class="stat-card"> <div class="stat-card">
<h3>{{ system_admins }}</h3> <h3>{{ system_admins }}</h3>
@@ -51,7 +51,7 @@
<h3>{{ blocked_users }}</h3> <h3>{{ blocked_users }}</h3>
<p>Blocked Users</p> <p>Blocked Users</p>
{% if blocked_users > 0 %} {% 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 %} {% endif %}
</div> </div>
</div> </div>
@@ -59,7 +59,7 @@
<!-- Recent Activity --> <!-- Recent Activity -->
<div class="stats-section"> <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="stats-grid">
<div class="stat-card"> <div class="stat-card">
<h3>{{ recent_users }}</h3> <h3>{{ recent_users }}</h3>
@@ -79,7 +79,7 @@
<!-- System Health --> <!-- System Health -->
{% if orphaned_users > 0 or orphaned_time_entries > 0 %} {% if orphaned_users > 0 or orphaned_time_entries > 0 %}
<div class="stats-section alert-section"> <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"> <div class="stats-grid">
{% if orphaned_users > 0 %} {% if orphaned_users > 0 %}
<div class="stat-card alert-card"> <div class="stat-card alert-card">
@@ -102,7 +102,7 @@
<div class="dashboard-grid"> <div class="dashboard-grid">
<!-- Top Companies --> <!-- Top Companies -->
<div class="dashboard-card"> <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 %} {% if top_companies %}
<table class="table"> <table class="table">
<thead> <thead>
@@ -131,7 +131,7 @@
<!-- Recent Companies --> <!-- Recent Companies -->
<div class="dashboard-card"> <div class="dashboard-card">
<h3>🆕 Recent Companies</h3> <h3><i class="ti ti-sparkles"></i> Recent Companies</h3>
{% if recent_companies_list %} {% if recent_companies_list %}
<table class="table"> <table class="table">
<thead> <thead>
@@ -169,25 +169,25 @@
<!-- Management Actions --> <!-- Management Actions -->
<div class="admin-panel"> <div class="admin-panel">
<h2>🛠️ System Management</h2> <h2><i class="ti ti-settings"></i> System Management</h2>
<div class="admin-actions"> <div class="admin-actions">
<a href="{{ url_for('users.system_admin_users') }}" class="btn btn-primary"> <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>
<a href="{{ url_for('system_admin.system_admin_companies') }}" class="btn btn-primary"> <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>
<a href="{{ url_for('system_admin.system_admin_time_entries') }}" class="btn btn-primary"> <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>
<a href="{{ url_for('system_admin.system_admin_settings') }}" class="btn btn-primary"> <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>
<a href="{{ url_for('system_admin.branding') }}" class="btn btn-primary"> <a href="{{ url_for('system_admin.branding') }}" class="btn btn-primary">
🎨 Branding Settings <i class="ti ti-palette"></i> Branding Settings
</a> </a>
<a href="{{ url_for('system_admin.system_admin_health') }}" class="btn btn-primary"> <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> </a>
</div> </div>
</div> </div>

View File

@@ -5,7 +5,7 @@
<div class="header-section"> <div class="header-section">
<h1>✏️ Edit User: {{ user.username }}</h1> <h1>✏️ Edit User: {{ user.username }}</h1>
<p class="subtitle">System Administrator - Edit user across companies</p> <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>
<div class="form-container"> <div class="form-container">

View File

@@ -3,23 +3,23 @@
{% block content %} {% block content %}
<div class="container"> <div class="container">
<div class="header-section"> <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> <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> </div>
<!-- System Health Status --> <!-- System Health Status -->
<div class="health-status-section"> <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-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-card {% if health_summary.health_status == 'healthy' %}healthy{% elif health_summary.health_status == 'issues' %}warning{% else %}critical{% endif %}">
<div class="health-icon"> <div class="health-icon">
{% if health_summary.health_status == 'healthy' %} {% 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' %} {% elif health_summary.health_status == 'issues' %}
⚠️ <i class="ti ti-alert-triangle" style="font-size: 2rem; color: #f59e0b;"></i>
{% else %} {% else %}
<i class="ti ti-circle-x" style="font-size: 2rem; color: #ef4444;"></i>
{% endif %} {% endif %}
</div> </div>
<div class="health-info"> <div class="health-info">
@@ -39,7 +39,7 @@
<div class="health-card {% if db_healthy %}healthy{% else %}critical{% endif %}"> <div class="health-card {% if db_healthy %}healthy{% else %}critical{% endif %}">
<div class="health-icon"> <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>
<div class="health-info"> <div class="health-info">
<h3>Database</h3> <h3>Database</h3>
@@ -55,7 +55,7 @@
</div> </div>
<div class="health-card info"> <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"> <div class="health-info">
<h3>Uptime</h3> <h3>Uptime</h3>
<p class="health-status">{{ uptime_duration.days }}d {{ uptime_duration.seconds//3600 }}h {{ (uptime_duration.seconds//60)%60 }}m</p> <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 --> <!-- Quick Stats -->
<div class="stats-section"> <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="stats-grid">
<div class="stat-card {% if health_summary.errors_24h > 0 %}error{% endif %}"> <div class="stat-card {% if health_summary.errors_24h > 0 %}error{% endif %}">
<h3>{{ health_summary.errors_24h }}</h3> <h3>{{ health_summary.errors_24h }}</h3>
@@ -91,7 +91,7 @@
<!-- Recent Errors --> <!-- Recent Errors -->
{% if errors %} {% if errors %}
<div class="events-section error-section"> <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"> <div class="events-list">
{% for error in errors %} {% for error in errors %}
<div class="event-item error"> <div class="event-item error">
@@ -115,7 +115,7 @@
<!-- Recent Warnings --> <!-- Recent Warnings -->
{% if warnings %} {% if warnings %}
<div class="events-section warning-section"> <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"> <div class="events-list">
{% for warning in warnings %} {% for warning in warnings %}
<div class="event-item warning"> <div class="event-item warning">
@@ -138,7 +138,7 @@
<!-- System Event Log --> <!-- System Event Log -->
<div class="events-section"> <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"> <div class="events-controls">
<button class="filter-btn active" data-filter="all">All Events</button> <button class="filter-btn active" data-filter="all">All Events</button>
<button class="filter-btn" data-filter="auth">Authentication</button> <button class="filter-btn" data-filter="auth">Authentication</button>

View File

@@ -5,7 +5,7 @@
<div class="header-section"> <div class="header-section">
<h1>⚙️ System Administrator Settings</h1> <h1>⚙️ System Administrator Settings</h1>
<p class="subtitle">Global system configuration and management</p> <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> </div>
<!-- System Statistics --> <!-- System Statistics -->
@@ -168,7 +168,7 @@
<h3>🚀 Quick Actions</h3> <h3>🚀 Quick Actions</h3>
<div class="actions-grid"> <div class="actions-grid">
<a href="{{ url_for('users.system_admin_users') }}" class="action-card"> <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"> <div class="action-content">
<h4>Manage All Users</h4> <h4>Manage All Users</h4>
<p>View, edit, and manage users across all companies</p> <p>View, edit, and manage users across all companies</p>

View File

@@ -5,7 +5,7 @@
<div class="header-section"> <div class="header-section">
<h1>⏱️ System Admin - Time Entries</h1> <h1>⏱️ System Admin - Time Entries</h1>
<p class="subtitle">View time entries across all companies</p> <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> </div>
<!-- Filter Section --> <!-- Filter Section -->
@@ -112,7 +112,7 @@
<div class="pagination-section"> <div class="pagination-section">
<div class="pagination"> <div class="pagination">
{% if entries.has_prev %} {% 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 %} {% endif %}
{% for page_num in entries.iter_pages() %} {% for page_num in entries.iter_pages() %}
@@ -128,7 +128,7 @@
{% endfor %} {% endfor %}
{% if entries.has_next %} {% 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 %} {% endif %}
</div> </div>

View File

@@ -3,9 +3,9 @@
{% block content %} {% block content %}
<div class="container"> <div class="container">
<div class="header-section"> <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> <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> </div>
<!-- Filter Options --> <!-- Filter Options -->
@@ -124,7 +124,7 @@
<div class="pagination-section"> <div class="pagination-section">
<div class="pagination"> <div class="pagination">
{% if users.has_prev %} {% 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 %} {% endif %}
{% for page_num in users.iter_pages() %} {% for page_num in users.iter_pages() %}
@@ -140,7 +140,7 @@
{% endfor %} {% endfor %}
{% if users.has_next %} {% 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 %} {% endif %}
</div> </div>

View File

@@ -11,7 +11,7 @@
<!-- Basic Information --> <!-- Basic Information -->
<div class="form-section"> <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-row">
<div class="form-group"> <div class="form-group">
<label for="task-name">Task Name *</label> <label for="task-name">Task Name *</label>
@@ -48,7 +48,7 @@
<!-- Assignment & Planning --> <!-- Assignment & Planning -->
<div class="form-section"> <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-row">
<div class="form-group"> <div class="form-group">
<label for="task-project">Project</label> <label for="task-project">Project</label>
@@ -89,7 +89,7 @@
<div class="hybrid-date-input"> <div class="hybrid-date-input">
<input type="date" id="task-due-date-native" class="date-input-native"> <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" }}"> <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>
<div class="date-error" id="task-due-date-error" style="display: none; color: #dc3545; font-size: 0.8rem; margin-top: 0.25rem;"></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> </div>
@@ -97,11 +97,11 @@
<!-- Dependencies --> <!-- Dependencies -->
<div class="form-section"> <div class="form-section">
<h3>🔗 Dependencies</h3> <h3><i class="ti ti-link"></i> Dependencies</h3>
<div class="dependencies-grid"> <div class="dependencies-grid">
<!-- Blocked By --> <!-- Blocked By -->
<div class="dependency-column"> <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> <p class="dependency-help">Tasks that must be completed before this task can start</p>
<div id="blocked-by-container" class="dependency-list"> <div id="blocked-by-container" class="dependency-list">
<!-- Blocked by tasks will be populated here --> <!-- Blocked by tasks will be populated here -->
@@ -114,7 +114,7 @@
<!-- Blocks --> <!-- Blocks -->
<div class="dependency-column"> <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> <p class="dependency-help">Tasks that cannot start until this task is completed</p>
<div id="blocks-container" class="dependency-list"> <div id="blocks-container" class="dependency-list">
<!-- Blocks tasks will be populated here --> <!-- Blocks tasks will be populated here -->
@@ -129,17 +129,17 @@
<!-- Subtasks --> <!-- Subtasks -->
<div class="form-section"> <div class="form-section">
<h3>📋 Subtasks</h3> <h3><i class="ti ti-clipboard-list"></i> Subtasks</h3>
<div id="subtasks-container"> <div id="subtasks-container">
<!-- Subtasks will be populated here --> <!-- Subtasks will be populated here -->
</div> </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> </div>
</form> </form>
<!-- Comments Section (outside form) --> <!-- Comments Section (outside form) -->
<div class="form-section" id="comments-section" style="display: none;"> <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"> <div id="comments-container">
<!-- Comments will be populated here --> <!-- Comments will be populated here -->
</div> </div>
@@ -147,8 +147,8 @@
<textarea id="new-comment" placeholder="Add a comment..." rows="2"></textarea> <textarea id="new-comment" placeholder="Add a comment..." rows="2"></textarea>
<div class="comment-form-actions"> <div class="comment-form-actions">
<select id="comment-visibility" class="comment-visibility-select" style="display: none;"> <select id="comment-visibility" class="comment-visibility-select" style="display: none;">
<option value="COMPANY">🏢 Company</option> <option value="COMPANY"><i class="ti ti-building"></i> Company</option>
<option value="TEAM">👥 Team Only</option> <option value="TEAM"><i class="ti ti-users"></i> Team Only</option>
</select> </select>
<button type="button" class="btn btn-sm btn-primary" onclick="addComment()">Post Comment</button> <button type="button" class="btn btn-sm btn-primary" onclick="addComment()">Post Comment</button>
</div> </div>

View File

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

View File

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

View File

@@ -4,7 +4,7 @@
<div class="management-container task-management-container"> <div class="management-container task-management-container">
<!-- Header Section --> <!-- Header Section -->
<div class="management-header task-header"> <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"> <div class="management-controls task-controls">
<!-- Smart Search --> <!-- Smart Search -->
<div class="smart-search-container"> <div class="smart-search-container">
@@ -19,9 +19,9 @@
<!-- Actions --> <!-- Actions -->
<div class="management-actions task-actions"> <div class="management-actions task-actions">
<button id="add-task-btn" class="btn btn-primary">+ Add Task</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">🔄 Refresh</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">📦 Show Archived</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> </div>
</div> </div>
@@ -54,7 +54,7 @@
<div class="task-board" id="task-board"> <div class="task-board" id="task-board">
<div class="task-column" data-status="TODO"> <div class="task-column" data-status="TODO">
<div class="column-header"> <div class="column-header">
<h3>📝 To Do</h3> <h3><i class="ti ti-circle"></i> To Do</h3>
<span class="task-count">0</span> <span class="task-count">0</span>
</div> </div>
<div class="column-content" id="column-TODO"> <div class="column-content" id="column-TODO">
@@ -64,7 +64,7 @@
<div class="task-column" data-status="IN_PROGRESS"> <div class="task-column" data-status="IN_PROGRESS">
<div class="column-header"> <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> <span class="task-count">0</span>
</div> </div>
<div class="column-content" id="column-IN_PROGRESS"> <div class="column-content" id="column-IN_PROGRESS">
@@ -74,7 +74,7 @@
<div class="task-column" data-status="IN_REVIEW"> <div class="task-column" data-status="IN_REVIEW">
<div class="column-header"> <div class="column-header">
<h3>🔍 In Review</h3> <h3><i class="ti ti-eye"></i> In Review</h3>
<span class="task-count">0</span> <span class="task-count">0</span>
</div> </div>
<div class="column-content" id="column-IN_REVIEW"> <div class="column-content" id="column-IN_REVIEW">
@@ -84,7 +84,7 @@
<div class="task-column" data-status="DONE"> <div class="task-column" data-status="DONE">
<div class="column-header"> <div class="column-header">
<h3> Done</h3> <h3><i class="ti ti-circle-check"></i> Done</h3>
<span class="task-count">0</span> <span class="task-count">0</span>
</div> </div>
<div class="column-content" id="column-DONE"> <div class="column-content" id="column-DONE">
@@ -94,7 +94,7 @@
<div class="task-column" data-status="CANCELLED"> <div class="task-column" data-status="CANCELLED">
<div class="column-header"> <div class="column-header">
<h3> Cancelled</h3> <h3><i class="ti ti-circle-x"></i> Cancelled</h3>
<span class="task-count">0</span> <span class="task-count">0</span>
</div> </div>
<div class="column-content" id="column-CANCELLED"> <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="task-column archived-column" data-status="ARCHIVED" style="display: none;">
<div class="column-header"> <div class="column-header">
<h3>📦 Archived</h3> <h3><i class="ti ti-archive"></i> Archived</h3>
<span class="task-count">0</span> <span class="task-count">0</span>
</div> </div>
<div class="column-content" id="column-ARCHIVED"> <div class="column-content" id="column-ARCHIVED">
@@ -1644,13 +1644,13 @@ class UnifiedTaskManager {
if (task.status === 'COMPLETED') { if (task.status === 'COMPLETED') {
actionButtons = ` actionButtons = `
<div class="task-actions"> <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> </div>
`; `;
} else if (task.status === 'ARCHIVED') { } else if (task.status === 'ARCHIVED') {
actionButtons = ` actionButtons = `
<div class="task-actions"> <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> </div>
`; `;
} }
@@ -1727,12 +1727,12 @@ class UnifiedTaskManager {
const archivedStatCard = document.getElementById('archived-stat-card'); const archivedStatCard = document.getElementById('archived-stat-card');
if (this.showArchived) { if (this.showArchived) {
toggleBtn.textContent = '📦 Hide Archived'; toggleBtn.innerHTML = '<i class="ti ti-archive"></i> Hide Archived';
toggleBtn.classList.add('active'); toggleBtn.classList.add('active');
archivedColumn.style.display = 'block'; archivedColumn.style.display = 'block';
archivedStatCard.style.display = 'block'; archivedStatCard.style.display = 'block';
} else { } else {
toggleBtn.textContent = '📦 Show Archived'; toggleBtn.innerHTML = '<i class="ti ti-archive"></i> Show Archived';
toggleBtn.classList.remove('active'); toggleBtn.classList.remove('active');
archivedColumn.style.display = 'none'; archivedColumn.style.display = 'none';
archivedStatCard.style.display = 'none'; archivedStatCard.style.display = 'none';
@@ -2141,7 +2141,7 @@ class UnifiedTaskManager {
element.dataset.commentId = comment.id; element.dataset.commentId = comment.id;
const visibilityBadge = comment.visibility === 'Team' ? 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 ? const editedText = comment.is_edited ?
` <span class="comment-edited">(edited)</span>` : ''; ` <span class="comment-edited">(edited)</span>` : '';

View File

@@ -22,7 +22,7 @@
<div class="help-section"> <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>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> </div>
</div> </div>