Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

106 строки
4.8KB

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title><?= e($board->name) ?> &mdash; Kanban</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1" />
  7. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" />
  8. <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet" />
  9. <link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Fraunces:opsz,wght@9..144,600&display=swap" rel="stylesheet" />
  10. <link rel="preconnect" href="https://fonts.googleapis.com" />
  11. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  12. <link href="/css/site.css" rel="stylesheet" />
  13. <link href="/css/kanban.css" rel="stylesheet" />
  14. </head>
  15. <body class="kanban-page">
  16. <!-- Top bar -->
  17. <nav class="navbar navbar-dark rk-topnav px-3 py-2">
  18. <div class="d-flex align-items-center gap-3 flex-grow-1 board-header-main">
  19. <a href="/boards" class="btn btn-sm btn-outline-secondary text-white border-secondary">
  20. <i class="bi bi-arrow-left"></i>
  21. </a>
  22. <span class="navbar-brand mb-0 h5 kanban-board-title"><?= e($board->name) ?></span>
  23. </div>
  24. <div class="board-header-search">
  25. <label for="job-search-input" class="visually-hidden">Search jobs</label>
  26. <div class="input-group input-group-sm">
  27. <span class="input-group-text"><i class="bi bi-search"></i></span>
  28. <input type="search" id="job-search-input" class="form-control"
  29. placeholder="Search job #, name, customer..." autocomplete="off" />
  30. </div>
  31. </div>
  32. <div class="d-flex align-items-center gap-2 board-header-actions">
  33. <button class="btn btn-sm btn-outline-light" id="btn-add-card"
  34. data-board-id="<?= e((string) $board->id) ?>">
  35. <i class="bi bi-plus-lg me-1"></i>Add Card
  36. </button>
  37. <button class="btn btn-sm btn-outline-light" id="btn-settings" title="Board Settings">
  38. <i class="bi bi-gear"></i>
  39. </button>
  40. <a href="/auth/logout" class="btn btn-sm btn-outline-light" title="Sign Out">
  41. <i class="bi bi-box-arrow-right"></i>
  42. </a>
  43. </div>
  44. </nav>
  45. <!-- Kanban grid -->
  46. <div class="kanban-wrapper">
  47. <div class="kanban-grid" id="kanban-grid">
  48. <div class="kanban-corner"></div>
  49. <?php foreach ($columns as $col): ?>
  50. <div class="kanban-col-header" data-col-id="<?= e((string) $col->id) ?>">
  51. <span class="col-label"><?= e($col->name) ?></span>
  52. <?php if ($col->showExportButton): ?>
  53. <a href="/columns/<?= e((string) $col->id) ?>/export" class="col-export-btn" title="Export column to CSV"><i class="bi bi-download"></i></a>
  54. <?php endif; ?>
  55. </div>
  56. <?php endforeach; ?>
  57. <?php foreach ($lanes as $lane): ?>
  58. <div class="kanban-lane-header" data-lane-id="<?= e((string) $lane->id) ?>">
  59. <button type="button" class="lane-toggle"
  60. title="Collapse or expand swim lane"
  61. aria-label="Collapse or expand swim lane"
  62. aria-expanded="true">
  63. <i class="bi bi-chevron-down" aria-hidden="true"></i>
  64. </button>
  65. <span class="lane-label"><?= e($lane->name) ?></span>
  66. <?php if ($lane->showExportButton): ?>
  67. <a href="/swimlanes/<?= e((string) $lane->id) ?>/export" class="lane-export-btn" title="Export swim lane to CSV"><i class="bi bi-download"></i></a>
  68. <?php endif; ?>
  69. </div>
  70. <?php foreach ($columns as $col): ?>
  71. <div class="kanban-cell"
  72. data-col-id="<?= e((string) $col->id) ?>"
  73. data-lane-id="<?= e((string) $lane->id) ?>">
  74. </div>
  75. <?php endforeach; ?>
  76. <?php endforeach; ?>
  77. </div>
  78. </div>
  79. <?php require __DIR__ . '/../partials/card-modal.php'; ?>
  80. <?php require __DIR__ . '/../partials/settings-panel.php'; ?>
  81. <script>
  82. var KANBAN = {
  83. boardId: <?= (int) $board->id ?>,
  84. boardSlug: "<?= e($board->slug) ?>",
  85. cards: <?= $cardsJson ?>
  86. };
  87. var KANBAN_COLS = <?= json_encode(array_map(fn($c) => ['id' => $c->id, 'name' => $c->name, 'position' => $c->position, 'show_card_count' => $c->showCardCount, 'show_export_button' => $c->showExportButton, 'show_card_age' => $c->showCardAge, 'card_age_warning_days' => $c->cardAgeWarningDays], $columns)) ?>;
  88. var KANBAN_LANES = <?= json_encode(array_map(fn($l) => ['id' => $l->id, 'name' => $l->name, 'position' => $l->position, 'show_card_count' => $l->showCardCount, 'show_export_button' => $l->showExportButton, 'show_card_age' => $l->showCardAge, 'card_age_warning_days' => $l->cardAgeWarningDays], $lanes)) ?>;
  89. </script>
  90. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
  91. <script src="https://cdn.jsdelivr.net/npm/sortablejs@1.15.2/Sortable.min.js"></script>
  92. <script src="/js/kanban-modal.js"></script>
  93. <script src="/js/kanban-settings.js"></script>
  94. <script src="/js/kanban-board.js"></script>
  95. </body>
  96. </html>

Powered by TurnKey Linux.