Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

107 řádky
4.9KB

  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. <span id="board-card-count" class="kanban-board-card-count" aria-live="polite"><?= $cardCount ?> <?= $cardCount === 1 ? 'card' : 'cards' ?></span>
  24. </div>
  25. <div class="board-header-search">
  26. <label for="job-search-input" class="visually-hidden">Search jobs</label>
  27. <div class="input-group input-group-sm">
  28. <span class="input-group-text"><i class="bi bi-search"></i></span>
  29. <input type="search" id="job-search-input" class="form-control"
  30. placeholder="Search job #, name, customer..." autocomplete="off" />
  31. </div>
  32. </div>
  33. <div class="d-flex align-items-center gap-2 board-header-actions">
  34. <button class="btn btn-sm btn-outline-light" id="btn-add-card"
  35. data-board-id="<?= e((string) $board->id) ?>">
  36. <i class="bi bi-plus-lg me-1"></i>Add Card
  37. </button>
  38. <button class="btn btn-sm btn-outline-light" id="btn-settings" title="Board Settings">
  39. <i class="bi bi-gear"></i>
  40. </button>
  41. <a href="/auth/logout" class="btn btn-sm btn-outline-light" title="Sign Out">
  42. <i class="bi bi-box-arrow-right"></i>
  43. </a>
  44. </div>
  45. </nav>
  46. <!-- Kanban grid -->
  47. <div class="kanban-wrapper">
  48. <div class="kanban-grid" id="kanban-grid">
  49. <div class="kanban-corner"></div>
  50. <?php foreach ($columns as $col): ?>
  51. <div class="kanban-col-header" data-col-id="<?= e((string) $col->id) ?>">
  52. <span class="col-label"><?= e($col->name) ?></span>
  53. <?php if ($col->showExportButton): ?>
  54. <a href="/columns/<?= e((string) $col->id) ?>/export" class="col-export-btn" title="Export column to CSV"><i class="bi bi-download"></i></a>
  55. <?php endif; ?>
  56. </div>
  57. <?php endforeach; ?>
  58. <?php foreach ($lanes as $lane): ?>
  59. <div class="kanban-lane-header" data-lane-id="<?= e((string) $lane->id) ?>">
  60. <button type="button" class="lane-toggle"
  61. title="Collapse or expand swim lane"
  62. aria-label="Collapse or expand swim lane"
  63. aria-expanded="true">
  64. <i class="bi bi-chevron-down" aria-hidden="true"></i>
  65. </button>
  66. <span class="lane-label"><?= e($lane->name) ?></span>
  67. <?php if ($lane->showExportButton): ?>
  68. <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>
  69. <?php endif; ?>
  70. </div>
  71. <?php foreach ($columns as $col): ?>
  72. <div class="kanban-cell"
  73. data-col-id="<?= e((string) $col->id) ?>"
  74. data-lane-id="<?= e((string) $lane->id) ?>">
  75. </div>
  76. <?php endforeach; ?>
  77. <?php endforeach; ?>
  78. </div>
  79. </div>
  80. <?php require __DIR__ . '/../partials/card-modal.php'; ?>
  81. <?php require __DIR__ . '/../partials/settings-panel.php'; ?>
  82. <script>
  83. var KANBAN = {
  84. boardId: <?= (int) $board->id ?>,
  85. boardSlug: "<?= e($board->slug) ?>",
  86. cards: <?= $cardsJson ?>
  87. };
  88. 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)) ?>;
  89. 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)) ?>;
  90. </script>
  91. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
  92. <script src="https://cdn.jsdelivr.net/npm/sortablejs@1.15.2/Sortable.min.js"></script>
  93. <script src="/js/kanban-modal.js"></script>
  94. <script src="/js/kanban-settings.js"></script>
  95. <script src="/js/kanban-board.js"></script>
  96. </body>
  97. </html>

Powered by TurnKey Linux.