From 253d5a9331e4b4775066ec8cb9664da9a2aa6ac9 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sat, 1 Apr 2017 15:43:36 -0400 Subject: Move calendar to external plugin --- ChangeLog | 7 ++ app/Controller/CalendarController.php | 120 --------------------------- app/Controller/ConfigController.php | 15 ---- app/Core/Base.php | 1 - app/Core/Helper.php | 1 - app/Formatter/TaskCalendarFormatter.php | 74 ----------------- app/Helper/CalendarHelper.php | 126 ----------------------------- app/Helper/ProjectHeaderHelper.php | 4 +- app/Locale/bs_BA/translations.php | 10 --- app/Locale/cs_CZ/translations.php | 10 --- app/Locale/da_DK/translations.php | 10 --- app/Locale/de_DE/translations.php | 10 --- app/Locale/el_GR/translations.php | 10 --- app/Locale/es_ES/translations.php | 10 --- app/Locale/fi_FI/translations.php | 10 --- app/Locale/fr_FR/translations.php | 10 --- app/Locale/hr_HR/translations.php | 10 --- app/Locale/hu_HU/translations.php | 10 --- app/Locale/id_ID/translations.php | 10 --- app/Locale/it_IT/translations.php | 10 --- app/Locale/ja_JP/translations.php | 10 --- app/Locale/ko_KR/translations.php | 10 --- app/Locale/my_MY/translations.php | 10 --- app/Locale/nb_NO/translations.php | 10 --- app/Locale/nl_NL/translations.php | 10 --- app/Locale/pl_PL/translations.php | 10 --- app/Locale/pt_BR/translations.php | 10 --- app/Locale/pt_PT/translations.php | 10 --- app/Locale/ru_RU/translations.php | 10 --- app/Locale/sr_Latn_RS/translations.php | 10 --- app/Locale/sv_SE/translations.php | 10 --- app/Locale/th_TH/translations.php | 10 --- app/Locale/tr_TR/translations.php | 10 --- app/Locale/zh_CN/translations.php | 10 --- app/ServiceProvider/FormatterProvider.php | 1 - app/ServiceProvider/HelperProvider.php | 1 - app/ServiceProvider/RouteProvider.php | 6 -- app/Template/calendar/project.php | 6 -- app/Template/calendar/user.php | 4 - app/Template/config/calendar.php | 36 --------- app/Template/config/keyboard_shortcuts.php | 1 - app/Template/config/sidebar.php | 3 - app/Template/dashboard/show.php | 4 +- app/Template/project/dropdown.php | 3 - app/Template/project_header/views.php | 4 +- assets/css/vendor.min.css | 5 -- assets/js/app.min.js | 6 +- assets/js/components/calendar.js | 65 --------------- assets/js/components/keyboard-shortcuts.js | 4 - assets/js/vendor.min.js | 22 ----- bower.json | 1 - doc/en_US/plugin-hooks.markdown | 2 + gulpfile.js | 4 - 53 files changed, 17 insertions(+), 769 deletions(-) delete mode 100644 app/Controller/CalendarController.php delete mode 100644 app/Formatter/TaskCalendarFormatter.php delete mode 100644 app/Helper/CalendarHelper.php delete mode 100644 app/Template/calendar/project.php delete mode 100644 app/Template/calendar/user.php delete mode 100644 app/Template/config/calendar.php delete mode 100644 assets/js/components/calendar.js diff --git a/ChangeLog b/ChangeLog index cd369e2b..09f3ad7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Version 1.0.42 +-------------- + +Breaking Changes: + +* Move calendar to external plugin: https://github.com/kanboard/plugin-calendar + Version 1.0.41 -------------- diff --git a/app/Controller/CalendarController.php b/app/Controller/CalendarController.php deleted file mode 100644 index e764549d..00000000 --- a/app/Controller/CalendarController.php +++ /dev/null @@ -1,120 +0,0 @@ -getUser(); - - $this->response->html($this->helper->layout->app('calendar/user', array( - 'user' => $user, - ))); - } - - /** - * Show calendar view for a project - * - * @access public - */ - public function project() - { - $project = $this->getProject(); - - $this->response->html($this->helper->layout->app('calendar/project', array( - 'project' => $project, - 'title' => $project['name'], - 'description' => $this->helper->projectHeader->getDescription($project), - ))); - } - - /** - * Get tasks to display on the calendar (project view) - * - * @access public - */ - public function projectEvents() - { - $project_id = $this->request->getIntegerParam('project_id'); - $start = $this->request->getStringParam('start'); - $end = $this->request->getStringParam('end'); - $search = $this->userSession->getFilters($project_id); - $queryBuilder = $this->taskLexer->build($search)->withFilter(new TaskProjectFilter($project_id)); - - $events = $this->helper->calendar->getTaskDateDueEvents(clone($queryBuilder), $start, $end); - $events = array_merge($events, $this->helper->calendar->getTaskEvents(clone($queryBuilder), $start, $end)); - - $events = $this->hook->merge('controller:calendar:project:events', $events, array( - 'project_id' => $project_id, - 'start' => $start, - 'end' => $end, - )); - - $this->response->json($events); - } - - /** - * Get tasks to display on the calendar (user view) - * - * @access public - */ - public function userEvents() - { - $user_id = $this->request->getIntegerParam('user_id'); - $start = $this->request->getStringParam('start'); - $end = $this->request->getStringParam('end'); - $queryBuilder = $this->taskQuery - ->withFilter(new TaskAssigneeFilter($user_id)) - ->withFilter(new TaskStatusFilter(TaskModel::STATUS_OPEN)); - - $events = $this->helper->calendar->getTaskDateDueEvents(clone($queryBuilder), $start, $end); - $events = array_merge($events, $this->helper->calendar->getTaskEvents(clone($queryBuilder), $start, $end)); - - if ($this->configModel->get('calendar_user_subtasks_time_tracking') == 1) { - $events = array_merge($events, $this->helper->calendar->getSubtaskTimeTrackingEvents($user_id, $start, $end)); - } - - $events = $this->hook->merge('controller:calendar:user:events', $events, array( - 'user_id' => $user_id, - 'start' => $start, - 'end' => $end, - )); - - $this->response->json($events); - } - - /** - * Update task due date - * - * @access public - */ - public function save() - { - if ($this->request->isAjax() && $this->request->isPost()) { - $values = $this->request->getJson(); - - $this->taskModificationModel->update(array( - 'id' => $values['task_id'], - 'date_due' => substr($values['date_due'], 0, 10), - )); - } - } -} diff --git a/app/Controller/ConfigController.php b/app/Controller/ConfigController.php index 6b85d1f9..6c2bc44b 100644 --- a/app/Controller/ConfigController.php +++ b/app/Controller/ConfigController.php @@ -49,9 +49,6 @@ class ConfigController extends BaseController case 'integrations': $values += array('integration_gravatar' => 0); break; - case 'calendar': - $values += array('calendar_user_subtasks_time_tracking' => 0); - break; } if ($this->configModel->save($values)) { @@ -127,18 +124,6 @@ class ConfigController extends BaseController ))); } - /** - * Display the calendar settings page - * - * @access public - */ - public function calendar() - { - $this->response->html($this->helper->layout->config('config/calendar', array( - 'title' => t('Settings').' > '.t('Calendar settings'), - ))); - } - /** * Display the integration settings page * diff --git a/app/Core/Base.php b/app/Core/Base.php index b9cdf5ad..ba610be6 100644 --- a/app/Core/Base.php +++ b/app/Core/Base.php @@ -72,7 +72,6 @@ use Pimple\Container; * @property \Kanboard\Formatter\SubtaskListFormatter $subtaskListFormatter * @property \Kanboard\Formatter\SubtaskTimeTrackingCalendarFormatter $subtaskTimeTrackingCalendarFormatter * @property \Kanboard\Formatter\TaskAutoCompleteFormatter $taskAutoCompleteFormatter - * @property \Kanboard\Formatter\TaskCalendarFormatter $taskCalendarFormatter * @property \Kanboard\Formatter\TaskGanttFormatter $taskGanttFormatter * @property \Kanboard\Formatter\TaskICalFormatter $taskICalFormatter * @property \Kanboard\Formatter\TaskListFormatter $taskListFormatter diff --git a/app/Core/Helper.php b/app/Core/Helper.php index 1b53ae2b..cb9c50f6 100644 --- a/app/Core/Helper.php +++ b/app/Core/Helper.php @@ -14,7 +14,6 @@ use Pimple\Container; * @property \Kanboard\Helper\AssetHelper $asset * @property \Kanboard\Helper\AvatarHelper $avatar * @property \Kanboard\Helper\BoardHelper $board - * @property \Kanboard\Helper\CalendarHelper $calendar * @property \Kanboard\Helper\CommentHelper $comment * @property \Kanboard\Helper\DateHelper $dt * @property \Kanboard\Helper\FileHelper $file diff --git a/app/Formatter/TaskCalendarFormatter.php b/app/Formatter/TaskCalendarFormatter.php deleted file mode 100644 index 75d2a83e..00000000 --- a/app/Formatter/TaskCalendarFormatter.php +++ /dev/null @@ -1,74 +0,0 @@ -fullDay = true; - return $this; - } - - /** - * Transform tasks to calendar events - * - * @access public - * @return array - */ - public function format() - { - $events = array(); - - foreach ($this->query->findAll() as $task) { - $events[] = array( - 'timezoneParam' => $this->timezoneModel->getCurrentTimezone(), - 'id' => $task['id'], - 'title' => t('#%d', $task['id']).' '.$task['title'], - 'backgroundColor' => $this->colorModel->getBackgroundColor($task['color_id']), - 'borderColor' => $this->colorModel->getBorderColor($task['color_id']), - 'textColor' => 'black', - 'url' => $this->helper->url->to('TaskViewController', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])), - 'start' => date($this->getDateTimeFormat(), $task[$this->startColumn]), - 'end' => date($this->getDateTimeFormat(), $task[$this->endColumn] ?: time()), - 'editable' => $this->fullDay, - 'allday' => $this->fullDay, - ); - } - - return $events; - } - - /** - * Get DateTime format for event - * - * @access private - * @return string - */ - private function getDateTimeFormat() - { - return $this->fullDay ? 'Y-m-d' : 'Y-m-d\TH:i:s'; - } -} diff --git a/app/Helper/CalendarHelper.php b/app/Helper/CalendarHelper.php deleted file mode 100644 index 0942177d..00000000 --- a/app/Helper/CalendarHelper.php +++ /dev/null @@ -1,126 +0,0 @@ - $checkUrl, - 'saveUrl' => $saveUrl, - ); - - return '
'; - } - - /** - * Get formatted calendar task due events - * - * @access public - * @param QueryBuilder $queryBuilder - * @param string $start - * @param string $end - * @return array - */ - public function getTaskDateDueEvents(QueryBuilder $queryBuilder, $start, $end) - { - $formatter = $this->taskCalendarFormatter; - $formatter->setFullDay(); - $formatter->setColumns('date_due'); - - return $queryBuilder - ->withFilter(new TaskDueDateRangeFilter(array($start, $end))) - ->format($formatter); - } - - /** - * Get formatted calendar task events - * - * @access public - * @param QueryBuilder $queryBuilder - * @param string $start - * @param string $end - * @return array - */ - public function getTaskEvents(QueryBuilder $queryBuilder, $start, $end) - { - $startColumn = $this->configModel->get('calendar_project_tasks', 'date_started'); - - $queryBuilder->getQuery()->addCondition($this->getCalendarCondition( - $this->dateParser->getTimestampFromIsoFormat($start), - $this->dateParser->getTimestampFromIsoFormat($end), - $startColumn, - 'date_due' - )); - - $formatter = $this->taskCalendarFormatter; - $formatter->setColumns($startColumn, 'date_due'); - - return $queryBuilder->format($formatter); - } - - /** - * Get formatted calendar subtask time tracking events - * - * @access public - * @param integer $user_id - * @param string $start - * @param string $end - * @return array - */ - public function getSubtaskTimeTrackingEvents($user_id, $start, $end) - { - return $this->subtaskTimeTrackingCalendarFormatter - ->withQuery($this->subtaskTimeTrackingModel->getUserQuery($user_id) - ->addCondition($this->getCalendarCondition( - $this->dateParser->getTimestampFromIsoFormat($start), - $this->dateParser->getTimestampFromIsoFormat($end), - 'start', - 'end' - )) - ) - ->format(); - } - - /** - * Build SQL condition for a given time range - * - * @access public - * @param string $start_time Start timestamp - * @param string $end_time End timestamp - * @param string $start_column Start column name - * @param string $end_column End column name - * @return string - */ - public function getCalendarCondition($start_time, $end_time, $start_column, $end_column) - { - $start_column = $this->db->escapeIdentifier($start_column); - $end_column = $this->db->escapeIdentifier($end_column); - - $conditions = array( - "($start_column >= '$start_time' AND $start_column <= '$end_time')", - "($start_column <= '$start_time' AND $end_column >= '$start_time')", - "($start_column <= '$start_time' AND ($end_column = '0' OR $end_column IS NULL))", - ); - - return $start_column.' IS NOT NULL AND '.$start_column.' > 0 AND ('.implode(' OR ', $conditions).')'; - } -} diff --git a/app/Helper/ProjectHeaderHelper.php b/app/Helper/ProjectHeaderHelper.php index 9514f4f2..e4f96107 100644 --- a/app/Helper/ProjectHeaderHelper.php +++ b/app/Helper/ProjectHeaderHelper.php @@ -34,15 +34,17 @@ class ProjectHeaderHelper extends Base * @param string $controller * @param string $action * @param bool $boardView + * @param string $plugin * @return string */ - public function render(array $project, $controller, $action, $boardView = false) + public function render(array $project, $controller, $action, $boardView = false, $plugin = '') { $filters = array( 'controller' => $controller, 'action' => $action, 'project_id' => $project['id'], 'search' => $this->getSearchQuery($project), + 'plugin' => $plugin, ); return $this->template->render('project_header/header', array( diff --git a/app/Locale/bs_BA/translations.php b/app/Locale/bs_BA/translations.php index a0354e2e..fc771db5 100644 --- a/app/Locale/bs_BA/translations.php +++ b/app/Locale/bs_BA/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Jezik:', 'Timezone:' => 'Vremenska zona:', 'All columns' => 'Sve kolone', - 'Calendar' => 'Kalendar', 'Next' => 'Slijedeći', '#%d' => '#%d', 'All swimlanes' => 'Sve swimlane trake', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Kada je zadatak premješten iz prve kolone', 'When task is moved to last column' => 'Kada je zadatak premješten u posljednju kolonu', 'Year(s)' => 'Godina/e', - 'Calendar settings' => 'Postavke kalendara', - 'Project calendar view' => 'Pregled kalendara projekta', 'Project settings' => 'Postavke projekta', - 'Show subtasks based on the time tracking' => 'Prikaži pod-zadatke bazirano na vremenskom praćenju', - 'Show tasks based on the creation date' => 'Prikaži zadatke bazirano na vremenu otvaranja', - 'Show tasks based on the start date' => 'Prikaži zadatke bazirano na vremenu početka rada', - 'Subtasks time tracking' => 'Vremensko praćenje pod-zadataka', - 'User calendar view' => 'Pregled korisničkog kalendara', 'Automatically update the start date' => 'Automatski ažuriraj početni datum', 'iCal feed' => 'iCal kanal', 'Preferences' => 'Postavke', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Zaustavi tajmer', 'Start timer' => 'Pokreni tajmer', 'My activity stream' => 'Tok mojih aktivnosti', - 'My calendar' => 'Moj kalendar', 'Search tasks' => 'Pretraga zadataka', 'Reset filters' => 'Vrati filtere na početno', 'My tasks due tomorrow' => 'Moji zadaci koje treba završiti sutra', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Opšti pregled', 'Board/Calendar/List view' => 'Pregled Ploče/Kalendara/Liste', 'Switch to the board view' => 'Promijeni da vidim ploču', - 'Switch to the calendar view' => 'Promijeni da vidim kalendar', 'Switch to the list view' => 'Promijeni da vidim listu', 'Go to the search/filter box' => 'Idi na kutiju s pretragom/filterima', 'There is no activity yet.' => 'Još uvijek nema aktivnosti.', diff --git a/app/Locale/cs_CZ/translations.php b/app/Locale/cs_CZ/translations.php index a324a77e..b308987a 100644 --- a/app/Locale/cs_CZ/translations.php +++ b/app/Locale/cs_CZ/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Jazyk:', 'Timezone:' => 'Časová zóna:', 'All columns' => 'Všechny sloupce', - 'Calendar' => 'Kalendář', 'Next' => 'Další', // '#%d' => '', 'All swimlanes' => 'Alle Swimlanes', @@ -607,14 +606,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - 'Calendar settings' => 'Nastavení kalendáře', - // 'Project calendar view' => '', 'Project settings' => 'Nastavení projektu', - 'Show subtasks based on the time tracking' => 'Zobrazit dílčí úkoly závislé na sledování času', - 'Show tasks based on the creation date' => 'Zobrazit úkoly podle datumu vytvoření', - 'Show tasks based on the start date' => 'Zobrazit úkoly podle datumu zahájení', - 'Subtasks time tracking' => 'Dílčí úkoly s časovačem', - 'User calendar view' => 'Zobrazení kalendáře uživatele', 'Automatically update the start date' => 'Automaticky aktualizovat počáteční datum', // 'iCal feed' => '', 'Preferences' => 'Předvolby', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Zastavit časovač', 'Start timer' => 'Spustit časovač', 'My activity stream' => 'Přehled mých aktivit', - 'My calendar' => 'Můj kalendář', 'Search tasks' => 'Hledání úkolů', 'Reset filters' => 'Resetovat filtry', 'My tasks due tomorrow' => 'Moje zítřejší úkoly', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Přehled', 'Board/Calendar/List view' => 'Nástěnka/Kalendář/Zobrazení seznamu', 'Switch to the board view' => 'Přepnout na nástěnku', - 'Switch to the calendar view' => 'Přepnout na kalendář', 'Switch to the list view' => 'Přepnout na seznam zobrazení', 'Go to the search/filter box' => 'Zobrazit vyhledávání/filtrování', 'There is no activity yet.' => 'Doposud nejsou žádné aktivity.', diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index d7d92d25..ff60ae0b 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Sprog', 'Timezone:' => 'Tidszone', 'All columns' => 'Alle kolonner', - 'Calendar' => 'Kalender', 'Next' => 'Næste', // '#%d' => '', 'All swimlanes' => 'Alle spor', @@ -607,14 +606,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', 'Year(s)' => 'År', - 'Calendar settings' => 'Kalender indstillinger', - 'Project calendar view' => 'Projekt kalender visning', 'Project settings' => 'Projekt indstillinger', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - 'User calendar view' => 'Bruger kalender visning', // 'Automatically update the start date' => '', // 'iCal feed' => '', 'Preferences' => 'Præferencer', @@ -670,7 +662,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', 'My activity stream' => 'Min aktivitets strøm', - 'My calendar' => 'Min kalender', 'Search tasks' => 'Søg opgaver', // 'Reset filters' => '', // 'My tasks due tomorrow' => '', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Overblik', 'Board/Calendar/List view' => 'Tavle/Kalender/Liste visning', 'Switch to the board view' => 'Skift til tavle visning', - 'Switch to the calendar view' => 'Skift til kalender visning', 'Switch to the list view' => 'Skift til liste visning', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index 7ff59e5d..6a8024f5 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Sprache:', 'Timezone:' => 'Zeitzone:', 'All columns' => 'Alle Spalten', - 'Calendar' => 'Kalender', 'Next' => 'Nächste', '#%d' => 'Nr %d', 'All swimlanes' => 'Alle Swimlanes', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Wenn Aufgabe von erster Spalte verschoben wird', 'When task is moved to last column' => 'Wenn Aufgabe in letzte Spalte verschoben wird', 'Year(s)' => 'Jahr(e)', - 'Calendar settings' => 'Kalender-Einstellungen', - 'Project calendar view' => 'Projekt-Kalendarsicht', 'Project settings' => 'Projekteinstellungen', - 'Show subtasks based on the time tracking' => 'Zeige Teilaufgaben basierend auf Zeiterfassung', - 'Show tasks based on the creation date' => 'Zeige Aufgaben basierend auf Erstelldatum', - 'Show tasks based on the start date' => 'Zeige Aufgaben basierend auf Beginndatum', - 'Subtasks time tracking' => 'Teilaufgaben-Zeiterfassung', - 'User calendar view' => 'Benutzer-Kalendersicht', 'Automatically update the start date' => 'Beginndatum automatisch aktualisieren', 'iCal feed' => 'iCal Feed', 'Preferences' => 'Einstellungen', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Stoppe Timer', 'Start timer' => 'Starte Timer', 'My activity stream' => 'Aktivitätsstream', - 'My calendar' => 'Mein Kalender', 'Search tasks' => 'Suche nach Aufgaben', 'Reset filters' => 'Filter zurücksetzen', 'My tasks due tomorrow' => 'Meine morgen fälligen Aufgaben', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Überblick', 'Board/Calendar/List view' => 'Board-/Kalender-/Listen-Ansicht', 'Switch to the board view' => 'Zur Board-Ansicht', - 'Switch to the calendar view' => 'Zur Kalender-Ansicht', 'Switch to the list view' => 'Zur Listen-Ansicht', 'Go to the search/filter box' => 'Zum Such- und Filterfeld', 'There is no activity yet.' => 'Es gibt bislang keine Aktivitäten.', diff --git a/app/Locale/el_GR/translations.php b/app/Locale/el_GR/translations.php index 2e4ba778..3938413b 100644 --- a/app/Locale/el_GR/translations.php +++ b/app/Locale/el_GR/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Γλώσσα:', 'Timezone:' => 'Timezone:', 'All columns' => 'Όλες οι στήλες', - 'Calendar' => 'Ημερολόγιο', 'Next' => 'Επόμενο', '#%d' => 'n˚%d', 'All swimlanes' => 'Όλες οι λωρίδες', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Όταν το έργο έχει μετακινηθεί στην 1η στήλη', 'When task is moved to last column' => 'Όταν το έργο έχει μετακινηθεί στην τελευταία στήλη', 'Year(s)' => 'Χρόνος(οι)', - 'Calendar settings' => 'Ρυθμίσεις ημερολογίου', - 'Project calendar view' => 'Προβολή ημερολογίου έργων', 'Project settings' => 'Ρυθμίσεις έργου', - 'Show subtasks based on the time tracking' => 'Εμφάνιση υπο-εργασίων με βάση την παρακολούθηση του χρόνου', - 'Show tasks based on the creation date' => 'Εμφάνιση έργων με βάση την ημερομηνία δημιουργίας', - 'Show tasks based on the start date' => 'Εμφάνιση έργων με βάση την ημερομηνία δημιουργίας ', - 'Subtasks time tracking' => 'Παρακολούθηση χρόνου υπο-εργασίων', - 'User calendar view' => 'Προβολή του ημερολογίου του χρήστη', 'Automatically update the start date' => 'Αυτόματη ενημέρωση της ημερομηνίας έναρξης', 'iCal feed' => 'iCal feed', 'Preferences' => 'Προτιμήσεις', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Διακοπή ρολογιού', 'Start timer' => 'Έναρξη ρολογιού', 'My activity stream' => 'Η ροή δραστηριοτήτων μου', - 'My calendar' => 'Το ημερολόγιο μου', 'Search tasks' => 'Αναζήτηση εργασιών', 'Reset filters' => 'Επαναφορά φίλτρων', 'My tasks due tomorrow' => 'Οι εργασίες καθηκόντων μου αύριο', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Επισκόπηση', 'Board/Calendar/List view' => 'Πίνακας / Ημερολόγιο / Προβολή λίστας', 'Switch to the board view' => 'Εναλλαγή στην προβολή του πίνακα', - 'Switch to the calendar view' => 'Εναλλαγή στην προβολή ημερολογίου', 'Switch to the list view' => 'Εναλλαγή στην προβολή λίστας', 'Go to the search/filter box' => 'Μετάβαση στο πλαίσιο αναζήτησης / φίλτρο', 'There is no activity yet.' => 'Δεν υπάρχει καμία δραστηριότητα ακόμα.', diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index 2990d4ee..7b3d2255 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Idioma', 'Timezone:' => 'Zona horaria', 'All columns' => 'Todas las columnas', - 'Calendar' => 'Calendario', 'Next' => 'Siguiente', // '#%d' => '', 'All swimlanes' => 'Todos los carriles', @@ -607,14 +606,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - // 'Calendar settings' => '', - // 'Project calendar view' => '', // 'Project settings' => '', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', // 'Automatically update the start date' => '', // 'iCal feed' => '', // 'Preferences' => '', @@ -670,7 +662,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', // 'My activity stream' => '', - // 'My calendar' => '', // 'Search tasks' => '', // 'Reset filters' => '', // 'My tasks due tomorrow' => '', @@ -684,7 +675,6 @@ return array( // 'Overview' => '', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index 043e4880..2566fa7b 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -455,7 +455,6 @@ return array( // 'Language:' => '', // 'Timezone:' => '', // 'All columns' => '', - // 'Calendar' => '', // 'Next' => '', // '#%d' => '', // 'All swimlanes' => '', @@ -607,14 +606,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - // 'Calendar settings' => '', - // 'Project calendar view' => '', // 'Project settings' => '', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', // 'Automatically update the start date' => '', // 'iCal feed' => '', // 'Preferences' => '', @@ -670,7 +662,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', // 'My activity stream' => '', - // 'My calendar' => '', // 'Search tasks' => '', // 'Reset filters' => '', // 'My tasks due tomorrow' => '', @@ -684,7 +675,6 @@ return array( // 'Overview' => '', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index 31c61801..3bb5b0be 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Langue :', 'Timezone:' => 'Fuseau horaire :', 'All columns' => 'Toutes les colonnes', - 'Calendar' => 'Agenda', 'Next' => 'Suivant', '#%d' => 'n˚%d', 'All swimlanes' => 'Toutes les swimlanes', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Lorsque la tâche est déplacée en dehors de la première colonne', 'When task is moved to last column' => 'Lorsque la tâche est déplacée dans la dernière colonne', 'Year(s)' => 'Année(s)', - 'Calendar settings' => 'Paramètres du calendrier', - 'Project calendar view' => 'Vue en mode projet du calendrier', 'Project settings' => 'Paramètres du projet', - 'Show subtasks based on the time tracking' => 'Afficher les sous-tâches basé sur le suivi du temps', - 'Show tasks based on the creation date' => 'Afficher les tâches en fonction de la date de création', - 'Show tasks based on the start date' => 'Afficher les tâches en fonction de la date de début', - 'Subtasks time tracking' => 'Suivi du temps par rapport aux sous-tâches', - 'User calendar view' => 'Vue en mode utilisateur du calendrier', 'Automatically update the start date' => 'Mettre à jour automatiquement la date de début', 'iCal feed' => 'Abonnement iCal', 'Preferences' => 'Préférences', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Stopper le chrono', 'Start timer' => 'Démarrer le chrono', 'My activity stream' => 'Mon flux d\'activité', - 'My calendar' => 'Mon agenda', 'Search tasks' => 'Rechercher des tâches', 'Reset filters' => 'Réinitialiser les filtres', 'My tasks due tomorrow' => 'Mes tâches qui arrivent à échéance demain', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Vue d\'ensemble', 'Board/Calendar/List view' => 'Vue Tableau/Calendrier/Liste', 'Switch to the board view' => 'Basculer vers le tableau', - 'Switch to the calendar view' => 'Basculer vers le calendrier', 'Switch to the list view' => 'Basculer vers la vue en liste', 'Go to the search/filter box' => 'Aller au champ de recherche', 'There is no activity yet.' => 'Il n\'y a pas encore d\'activité.', diff --git a/app/Locale/hr_HR/translations.php b/app/Locale/hr_HR/translations.php index ac09848b..8965623d 100644 --- a/app/Locale/hr_HR/translations.php +++ b/app/Locale/hr_HR/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Jezik:', 'Timezone:' => 'Vremenska zona:', 'All columns' => 'Svi stupci', - 'Calendar' => 'Kalendar', 'Next' => 'Idući', // '#%d' => '', 'All swimlanes' => 'Sve staze', @@ -607,14 +606,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - 'Calendar settings' => 'Postavke kalendara', - 'Project calendar view' => 'Projektni kalendar', 'Project settings' => 'Postavke projekta', - 'Show subtasks based on the time tracking' => 'Prikaz pod-zadataka po evidenciji vremena', - 'Show tasks based on the creation date' => 'Prikaz zadataka po datumu kreiranja', - 'Show tasks based on the start date' => 'Prikaz zadataka po datumu početka', - 'Subtasks time tracking' => 'Evidencija vremena pod-zadataka', - 'User calendar view' => 'Korisnički kalendar', // 'Automatically update the start date' => '', // 'iCal feed' => '', 'Preferences' => 'Postavke', @@ -670,7 +662,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', 'My activity stream' => 'Moje aktivnosti', - 'My calendar' => 'Moj kalendar', 'Search tasks' => 'Pretraživanje zadataka', 'Reset filters' => 'Obriši filtere', 'My tasks due tomorrow' => 'Moji zadaci sa rokom sutra', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Pregled', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index a0c5360a..9685486b 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Nyelv:', 'Timezone:' => 'Időzóna:', 'All columns' => 'Minden oszlop', - 'Calendar' => 'Naptár', 'Next' => 'Következő', '#%d' => '#%d', 'All swimlanes' => 'Minden sáv', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Mikor a feladat az első oszlopból el lett mozgatva', 'When task is moved to last column' => 'Mikor a feladat az utolsó oszlopba lett elmozgatva', 'Year(s)' => 'Év(ek)', - 'Calendar settings' => 'Naptár beállítások', - 'Project calendar view' => 'A projekt megjelenítése naptári formában', 'Project settings' => 'Projekt beállítások', - 'Show subtasks based on the time tracking' => 'A részfeladatok megjelenítése az idő nyomkövetés alapján', - 'Show tasks based on the creation date' => 'A feladatok megjelenítése a létrehozás dátuma alapján', - 'Show tasks based on the start date' => 'A feladatok megjelenítése a kezdő dátum alapján', - 'Subtasks time tracking' => 'A részfeladatok idejének megjelenítése', - 'User calendar view' => 'A felhasználó naptárának megjelenítése', 'Automatically update the start date' => 'A kezdő dátum automatikus módosítása', // 'iCal feed' => '', 'Preferences' => 'Preferenciák', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Időmérő leállítása', 'Start timer' => 'Időmérő elindítása', 'My activity stream' => 'Tevékenységem', - 'My calendar' => 'Naptáram', 'Search tasks' => 'Feladatok közötti keresés', 'Reset filters' => 'Szűrő alaphelyzetbe állítás', 'My tasks due tomorrow' => 'Holnapi határidejű feladataim', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Áttekintés', 'Board/Calendar/List view' => 'Tábla/Naptár/Lista nézet', 'Switch to the board view' => 'Átkapcsolás tábla nézetbe', - 'Switch to the calendar view' => 'Átkapcsolás naptár nézetbe', 'Switch to the list view' => 'Átkapcsolás lista nézetbe', 'Go to the search/filter box' => 'Ugrás a keresés/szűrés dobozhoz', 'There is no activity yet.' => 'Még nincs tevékenység', diff --git a/app/Locale/id_ID/translations.php b/app/Locale/id_ID/translations.php index 511a795e..e0c402c3 100644 --- a/app/Locale/id_ID/translations.php +++ b/app/Locale/id_ID/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Bahasa:', 'Timezone:' => 'Zona waktu:', 'All columns' => 'Semua kolom', - 'Calendar' => 'Kalender', 'Next' => 'Selanjutnya', '#%d' => '#%d', 'All swimlanes' => 'Semua swimlane', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Saat tugas dipindahkan dari kolom pertama', 'When task is moved to last column' => 'Saat tugas dipindahkan ke kolom terakhir', 'Year(s)' => 'Tahun', - 'Calendar settings' => 'Pengaturan kalender', - 'Project calendar view' => 'Tampilan kalender proyek', 'Project settings' => 'Pengaturan proyek', - 'Show subtasks based on the time tracking' => 'Tampilkan sub-tugas berdasarkan pelacakan waktu', - 'Show tasks based on the creation date' => 'Tampilkan tugas berdasarkan tanggal pembuatan', - 'Show tasks based on the start date' => 'Tampilkan tugas berdasarkan tanggal mulai', - 'Subtasks time tracking' => 'Pelacakan waktu sub-tugas', - 'User calendar view' => 'Tampilan kalender pengguna', 'Automatically update the start date' => 'Otomatis memperbarui tanggal permulaan', 'iCal feed' => 'Umpan iCal', 'Preferences' => 'Preferensi', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Hentikan timer', 'Start timer' => 'Mulai timer', 'My activity stream' => 'Aliran kegiatan saya', - 'My calendar' => 'Kalender saya', 'Search tasks' => 'Cari tugas', 'Reset filters' => 'Reset saringan', 'My tasks due tomorrow' => 'Tugas saya yang berakhir besok', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Ringkasan', 'Board/Calendar/List view' => 'Tampilan Papan/Kalender/Daftar', 'Switch to the board view' => 'Beralih ke tampilan papan', - 'Switch to the calendar view' => 'Beralih ke tampilan kalender', 'Switch to the list view' => 'Beralih ke tampilan daftar', 'Go to the search/filter box' => 'Pergi ke kotak pencarian/saringan', 'There is no activity yet.' => 'Belum ada aktifitas.', diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index f664f8b1..db9174fe 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Lingua', 'Timezone:' => 'Fuso Orario', 'All columns' => 'Tutte le colonne', - 'Calendar' => 'Calendario', 'Next' => 'Prossimo', // '#%d' => '', 'All swimlanes' => 'Tutte le corsie', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Quando un task è spostato dalla prima colonna', 'When task is moved to last column' => 'Quando un task è spostato nell\'ultima colonna', 'Year(s)' => 'Anno/i', - 'Calendar settings' => 'Impostazioni del calendario', - 'Project calendar view' => 'Vista di progetto a calendario', 'Project settings' => 'Impostazioni di progetto', - 'Show subtasks based on the time tracking' => 'Mostra i sotto-task in base al time tracking', - 'Show tasks based on the creation date' => 'Mostra i task in base alla data di creazione', - 'Show tasks based on the start date' => 'Mostra i task in base alla data di inizio', - 'Subtasks time tracking' => 'Time tracking per i sotto-task', - 'User calendar view' => 'Vista utente a calendario', 'Automatically update the start date' => 'Aggiorna automaticamente la data di inizio', 'iCal feed' => 'feed iCal', 'Preferences' => 'Preferenze', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Ferma il timer', 'Start timer' => 'Avvia il timer', 'My activity stream' => 'Il mio flusso attività', - 'My calendar' => 'Il mio calendario', 'Search tasks' => 'Ricerca task', 'Reset filters' => 'Annulla filtri', 'My tasks due tomorrow' => 'I miei task da completare per domani', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Panoramica', 'Board/Calendar/List view' => 'Vista Bacheca/Calendario/Lista', 'Switch to the board view' => 'Passa alla vista "bacheca"', - 'Switch to the calendar view' => 'Passa alla vista "calendario"', 'Switch to the list view' => 'Passa alla vista "elenco"', 'Go to the search/filter box' => 'Vai alla casella di ricerca/filtro', 'There is no activity yet.' => 'Non è presente ancora nessuna attività.', diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index b9cc20ea..8114afb9 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => '言語:', 'Timezone:' => 'タイムゾーン:', 'All columns' => '全てのカラム', - 'Calendar' => 'カレンダー', 'Next' => '次へ', '#%d' => '#%d', 'All swimlanes' => '全てのスイムレーン', @@ -607,14 +606,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - // 'Calendar settings' => '', - // 'Project calendar view' => '', // 'Project settings' => '', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', // 'Automatically update the start date' => '', // 'iCal feed' => '', // 'Preferences' => '', @@ -670,7 +662,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', // 'My activity stream' => '', - // 'My calendar' => '', // 'Search tasks' => '', // 'Reset filters' => '', // 'My tasks due tomorrow' => '', @@ -684,7 +675,6 @@ return array( // 'Overview' => '', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', diff --git a/app/Locale/ko_KR/translations.php b/app/Locale/ko_KR/translations.php index 02ea9c96..c5c3b669 100644 --- a/app/Locale/ko_KR/translations.php +++ b/app/Locale/ko_KR/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => '언어:', 'Timezone:' => '시간대:', 'All columns' => '모든 컬럼', - 'Calendar' => '달력', 'Next' => '다음에 ', '#%d' => '#%d', 'All swimlanes' => '모든 스윔레인', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => '할일이 첫번째 컬럼으로 옮겨졌을때', 'When task is moved to last column' => '할일이 마지막 컬럼으로 옮겨졌을때', 'Year(s)' => '년', - 'Calendar settings' => '달력 설정', - 'Project calendar view' => '프로젝트 달력 보기', 'Project settings' => '프로젝트 설정', - 'Show subtasks based on the time tracking' => '시간 트래킹의 서브 할일 보기', - 'Show tasks based on the creation date' => '생성 날짜로 할일 보기', - 'Show tasks based on the start date' => '시작 날짜로 할일 보기', - 'Subtasks time tracking' => '서브 할일 시간 트래킹', - 'User calendar view' => '담당자 달력 보기', 'Automatically update the start date' => '시작일에 자동 갱신', 'iCal feed' => 'iCal 피드', 'Preferences' => '우선권', @@ -670,7 +662,6 @@ return array( 'Stop timer' => '타이머 정지', 'Start timer' => '타이머 시작', 'My activity stream' => '내 활동기록', - 'My calendar' => '내 캘린더', 'Search tasks' => '할일 찾기', 'Reset filters' => '필터 리셋', 'My tasks due tomorrow' => '내일까지 내 할일', @@ -684,7 +675,6 @@ return array( 'Overview' => '개요', 'Board/Calendar/List view' => '보드/달력/리스트 보기', 'Switch to the board view' => '보드 보기로 전환', - 'Switch to the calendar view' => '달력 보기로 전환', 'Switch to the list view' => '리스트 보기로 전환', 'Go to the search/filter box' => '검색/필터 박스로 이동', 'There is no activity yet.' => '활동이 없습니다', diff --git a/app/Locale/my_MY/translations.php b/app/Locale/my_MY/translations.php index 2b71d811..40327f6c 100644 --- a/app/Locale/my_MY/translations.php +++ b/app/Locale/my_MY/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Bahasa:', 'Timezone:' => 'Zon masa:', 'All columns' => 'Semua kolom', - 'Calendar' => 'Kalender', 'Next' => 'Selanjutnya', '#%d' => 'n°%d', 'All swimlanes' => 'Semua swimlane', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Ketika tugas dipindahkan dari kolom pertama', 'When task is moved to last column' => 'Ketika tugas dipindahkan ke kolom terakhir', 'Year(s)' => 'Tahun', - 'Calendar settings' => 'Pengaturan kalender', - 'Project calendar view' => 'Tampilan kalender projek', 'Project settings' => 'Pengaturan projek', - 'Show subtasks based on the time tracking' => 'Tampilkan subtugas berdasarkan pelacakan waktu', - 'Show tasks based on the creation date' => 'Tampilkan tugas berdasarkan tanggal pembuatan', - 'Show tasks based on the start date' => 'Tampilkan tugas berdasarkan tanggal mulai', - 'Subtasks time tracking' => 'Pelacakan waktu subtgas', - 'User calendar view' => 'Pengguna tampilan kalender', 'Automatically update the start date' => 'Otomatikkan pengemaskinian tanggal', 'iCal feed' => 'iCal feed', 'Preferences' => 'Keutamaan', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Hentikan timer', 'Start timer' => 'Mulai timer', 'My activity stream' => 'Aliran kegiatan saya', - 'My calendar' => 'Kalender saya', 'Search tasks' => 'Cari tugas', 'Reset filters' => 'Reset ulang filter', 'My tasks due tomorrow' => 'Tugas saya yang berakhir besok', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Ikhtisar', 'Board/Calendar/List view' => 'Tampilan Papan/Kalender/Daftar', 'Switch to the board view' => 'Beralih ke tampilan papan', - 'Switch to the calendar view' => 'Beralih ke tampilan kalender', 'Switch to the list view' => 'Beralih ke tampilan daftar', 'Go to the search/filter box' => 'Pergi ke kotak pencarian/filter', 'There is no activity yet.' => 'Tidak ada aktifitas saat ini.', diff --git a/app/Locale/nb_NO/translations.php b/app/Locale/nb_NO/translations.php index 4e52428d..3f1f211a 100644 --- a/app/Locale/nb_NO/translations.php +++ b/app/Locale/nb_NO/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Språk', 'Timezone:' => 'Tidssone', 'All columns' => 'Alle kolonner', - 'Calendar' => 'Kalender', 'Next' => 'Neste', // '#%d' => '', 'All swimlanes' => 'Alle svømmebaner', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Når oppgaven er flyttet fra første kolon', 'When task is moved to last column' => 'Når oppgaven er flyttet til siste kolonne', 'Year(s)' => 'år', - 'Calendar settings' => 'Kalenderinstillinger', - 'Project calendar view' => 'Visning prosjektkalender', 'Project settings' => 'Prosjektinnstillinger', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', 'Automatically update the start date' => 'Oppdater automatisk start-datoen', // 'iCal feed' => '', 'Preferences' => 'Preferanser', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Stopp timer', 'Start timer' => 'Start timer', 'My activity stream' => 'Aktivitetslogg', - 'My calendar' => 'Min kalender', 'Search tasks' => 'Søk oppgave', 'Reset filters' => 'Nullstill filter', 'My tasks due tomorrow' => 'Mine oppgaver med frist i morgen', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Oversikt', 'Board/Calendar/List view' => 'Oversikt/kalender/listevisning', 'Switch to the board view' => 'Oversiktsvisning', - 'Switch to the calendar view' => 'Kalendevisning', 'Switch to the list view' => 'Listevisning', 'Go to the search/filter box' => 'Gå til søk/filter', 'There is no activity yet.' => 'Ingen aktiviteter ennå.', diff --git a/app/Locale/nl_NL/translations.php b/app/Locale/nl_NL/translations.php index 623cdb3a..2b8fdbc4 100644 --- a/app/Locale/nl_NL/translations.php +++ b/app/Locale/nl_NL/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Taal :', 'Timezone:' => 'Tijdzone :', 'All columns' => 'Alle kolommen', - 'Calendar' => 'Agenda', 'Next' => 'Volgende', '#%d' => '%d', 'All swimlanes' => 'Alle swimlanes', @@ -607,14 +606,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', 'Year(s)' => 'Jaar/Jaren', - 'Calendar settings' => 'Kalender instellingen', - // 'Project calendar view' => '', 'Project settings' => 'Project instellingen', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', // 'Automatically update the start date' => '', // 'iCal feed' => '', 'Preferences' => 'Voorkeuren', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Stop timer', 'Start timer' => 'Start timer', 'My activity stream' => 'Mijn activiteiten', - 'My calendar' => 'Mijn kalender', 'Search tasks' => 'Zoek taken', 'Reset filters' => 'Reset filters', // 'My tasks due tomorrow' => '', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Overzicht', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index 3e8a8c86..d23df58e 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Język:', 'Timezone:' => 'Strefa czasowa:', 'All columns' => 'Wszystkie kolumny', - 'Calendar' => 'Kalendarz', 'Next' => 'Następny', '#%d' => 'nr %d', 'All swimlanes' => 'Wszystkie tory', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Przeniesienie zadania z pierwszej kolumny', 'When task is moved to last column' => 'Przeniesienie zadania do ostatniej kolumny', 'Year(s)' => 'Lat', - 'Calendar settings' => 'Ustawienia kalendarza', - 'Project calendar view' => 'Widok kalendarza projektu', 'Project settings' => 'Ustawienia Projektu', - 'Show subtasks based on the time tracking' => 'Pokaż pod-zadania w śledzeniu czasu', - 'Show tasks based on the creation date' => 'Pokaż zadania względem daty utworzenia', - 'Show tasks based on the start date' => 'Pokaż zadania względem daty rozpoczęcia', - 'Subtasks time tracking' => 'Śledzenie czasu pod-zadań', - 'User calendar view' => 'Widok kalendarza użytkownika', 'Automatically update the start date' => 'Automatycznie aktualizuj datę rozpoczęcia', // 'iCal feed' => '', 'Preferences' => 'Ustawienia', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Zatrzymaj pomiar czasu', 'Start timer' => 'Uruchom pomiar czasu', 'My activity stream' => 'Moja aktywność', - 'My calendar' => 'Mój kalendarz', 'Search tasks' => 'Szukaj zadań', 'Reset filters' => 'Resetuj zastosowane filtry', 'My tasks due tomorrow' => 'Moje zadania do jutra', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Podsumowanie', 'Board/Calendar/List view' => 'Widok: Tablica/Kalendarz/Lista', 'Switch to the board view' => 'Przełącz na tablicę', - 'Switch to the calendar view' => 'Przełącz na kalendarz', 'Switch to the list view' => 'Przełącz na listę', 'Go to the search/filter box' => 'Użyj pola wyszukiwania/filtrów', 'There is no activity yet.' => 'Brak powiadomień', diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index 694e7c5e..4a8202de 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Idioma', 'Timezone:' => 'Fuso horário', 'All columns' => 'Todas as colunas', - 'Calendar' => 'Calendário', 'Next' => 'Próximo', '#%d' => '#%d', 'All swimlanes' => 'Todas as swimlanes', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Quando a tarefa é movida fora da primeira coluna', 'When task is moved to last column' => 'Quando a tarefa é movida para a última coluna', 'Year(s)' => 'Ano(s)', - 'Calendar settings' => 'Configurações do calendário', - 'Project calendar view' => 'Vista em modo projeto do calendário', 'Project settings' => 'Configurações dos projetos', - 'Show subtasks based on the time tracking' => 'Mostrar as subtarefas com base no controle de tempo', - 'Show tasks based on the creation date' => 'Mostrar as tarefas em função da data de criação', - 'Show tasks based on the start date' => 'Mostrar as tarefas em função da data de início', - 'Subtasks time tracking' => 'Monitoramento do tempo comparado as subtarefas', - 'User calendar view' => 'Vista em modo utilizador do calendário', 'Automatically update the start date' => 'Atualizar automaticamente a data de início', 'iCal feed' => 'Subscrição iCal', 'Preferences' => 'Preferências', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Stop timer', 'Start timer' => 'Start timer', 'My activity stream' => 'Meu feed de atividades', - 'My calendar' => 'Minha agenda', 'Search tasks' => 'Pesquisar tarefas', 'Reset filters' => 'Redefinir os filtros', 'My tasks due tomorrow' => 'Minhas tarefas que expirarão amanhã', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Visão global', 'Board/Calendar/List view' => 'Vista Painel/Calendário/Lista', 'Switch to the board view' => 'Mudar para o modo Painel', - 'Switch to the calendar view' => 'Mudar par o modo Calendário', 'Switch to the list view' => 'Mudar par o modo Lista', 'Go to the search/filter box' => 'Ir para o campo de pesquisa', 'There is no activity yet.' => 'Não há nenhuma atividade ainda.', diff --git a/app/Locale/pt_PT/translations.php b/app/Locale/pt_PT/translations.php index 0c1b7106..769ab8c5 100644 --- a/app/Locale/pt_PT/translations.php +++ b/app/Locale/pt_PT/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Idioma:', 'Timezone:' => 'Fuso horário:', 'All columns' => 'Todas as colunas', - 'Calendar' => 'Calendário', 'Next' => 'Próximo', // '#%d' => '', 'All swimlanes' => 'Todos os swimlane', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Quando a tarefa é movida fora da primeira coluna', 'When task is moved to last column' => 'Quando a tarefa é movida para a última coluna', 'Year(s)' => 'Ano(s)', - 'Calendar settings' => 'Configurações do calendário', - 'Project calendar view' => 'Vista em modo projeto do calendário', 'Project settings' => 'Configurações dos projetos', - 'Show subtasks based on the time tracking' => 'Mostrar as subtarefas com base no controle de tempo', - 'Show tasks based on the creation date' => 'Mostrar as tarefas em função da data de criação', - 'Show tasks based on the start date' => 'Mostrar as tarefas em função da data de início', - 'Subtasks time tracking' => 'Monitoramento do tempo comparado as subtarefas', - 'User calendar view' => 'Vista em modo utilizador do calendário', 'Automatically update the start date' => 'Actualizar automaticamente a data de início', 'iCal feed' => 'Subscrição iCal', 'Preferences' => 'Preferências', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Parar temporizador', 'Start timer' => 'Iniciar temporizador', 'My activity stream' => 'O meu feed de actividade', - 'My calendar' => 'A minha agenda', 'Search tasks' => 'Pesquisar tarefas', 'Reset filters' => 'Redefinir os filtros', 'My tasks due tomorrow' => 'A minhas tarefas que expiram amanhã', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Visão global', 'Board/Calendar/List view' => 'Vista Painel/Calendário/Lista', 'Switch to the board view' => 'Mudar para o modo Painel', - 'Switch to the calendar view' => 'Mudar para o modo Calendário', 'Switch to the list view' => 'Mudar para o modo Lista', 'Go to the search/filter box' => 'Ir para o campo de pesquisa', 'There is no activity yet.' => 'Ainda não há nenhuma actividade.', diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index 36cb4357..122013ff 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Язык:', 'Timezone:' => 'Временная зона:', 'All columns' => 'Все колонки', - 'Calendar' => 'Календарь', 'Next' => 'Следующий', '#%d' => '#%d', 'All swimlanes' => 'Все дорожки', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Когда задача перемещается из первой колонки', 'When task is moved to last column' => 'Когда задача перемещается в последнюю колонку', 'Year(s)' => 'Год(а)', - 'Calendar settings' => 'Настройки календаря', - 'Project calendar view' => 'Вид календаря проекта', 'Project settings' => 'Настройки проекта', - 'Show subtasks based on the time tracking' => 'Показать подзадачи, основанные на отслеживании времени', - 'Show tasks based on the creation date' => 'Показать задачи в зависимости от даты создания', - 'Show tasks based on the start date' => 'Показать задачи в зависимости от даты начала', - 'Subtasks time tracking' => 'Отслеживание времени подзадач', - 'User calendar view' => 'Просмотреть календарь пользователя', 'Automatically update the start date' => 'Автоматическое обновление даты начала', 'iCal feed' => 'iCal данные', 'Preferences' => 'Предпочтения', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Остановить таймер', 'Start timer' => 'Запустить таймер', 'My activity stream' => 'Лента моей активности', - 'My calendar' => 'Мой календарь', 'Search tasks' => 'Поиск задачи', 'Reset filters' => 'Сбросить фильтры', 'My tasks due tomorrow' => 'Мои задачи на завтра', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Обзор', 'Board/Calendar/List view' => 'Просмотр Доска/Календарь/Список', 'Switch to the board view' => 'Переключиться в режим доски', - 'Switch to the calendar view' => 'Переключиться в режим календаря', 'Switch to the list view' => 'Переключиться в режим списка', 'Go to the search/filter box' => 'Перейти в поиск/фильтр', 'There is no activity yet.' => 'Активности еще не было', diff --git a/app/Locale/sr_Latn_RS/translations.php b/app/Locale/sr_Latn_RS/translations.php index 0dedda0a..0a8cd77f 100644 --- a/app/Locale/sr_Latn_RS/translations.php +++ b/app/Locale/sr_Latn_RS/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Jezik:', 'Timezone:' => 'Vremenska zona:', 'All columns' => 'Sve kolone', - 'Calendar' => 'Kalendar', 'Next' => 'Sledeći', // '#%d' => '', 'All swimlanes' => 'Svi razdelniki', @@ -607,14 +606,7 @@ return array( // 'When task is moved from first column' => '', // 'When task is moved to last column' => '', // 'Year(s)' => '', - // 'Calendar settings' => '', - // 'Project calendar view' => '', // 'Project settings' => '', - // 'Show subtasks based on the time tracking' => '', - // 'Show tasks based on the creation date' => '', - // 'Show tasks based on the start date' => '', - // 'Subtasks time tracking' => '', - // 'User calendar view' => '', // 'Automatically update the start date' => '', // 'iCal feed' => '', // 'Preferences' => '', @@ -670,7 +662,6 @@ return array( // 'Stop timer' => '', // 'Start timer' => '', // 'My activity stream' => '', - // 'My calendar' => '', // 'Search tasks' => '', // 'Reset filters' => '', // 'My tasks due tomorrow' => '', @@ -684,7 +675,6 @@ return array( // 'Overview' => '', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', - // 'Switch to the calendar view' => '', // 'Switch to the list view' => '', // 'Go to the search/filter box' => '', // 'There is no activity yet.' => '', diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index 2ff818d5..27ba52a9 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Språk', 'Timezone:' => 'Tidszon', 'All columns' => 'Alla kolumner', - 'Calendar' => 'Kalender', 'Next' => 'Nästa', '#%d' => '#%d', 'All swimlanes' => 'Alla swimlanes', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'När uppgiften flyttas från första kolumnen', 'When task is moved to last column' => 'När uppgiften flyttas till sista kolumnen', 'Year(s)' => 'År', - 'Calendar settings' => 'Inställningar för kalendern', - 'Project calendar view' => 'Projektkalendervy', 'Project settings' => 'Projektinställningar', - 'Show subtasks based on the time tracking' => 'Visa deluppgifter baserade på tidsspårning', - 'Show tasks based on the creation date' => 'Visa uppgifter baserade på skapat datum', - 'Show tasks based on the start date' => 'Visa uppgifter baserade på startdatum', - 'Subtasks time tracking' => 'Deluppgifter tidsspårning', - 'User calendar view' => 'Användarkalendervy', 'Automatically update the start date' => 'Automatisk uppdatering av startdatum', 'iCal feed' => 'iCal flöde', 'Preferences' => 'Preferenser', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Stoppa timer', 'Start timer' => 'Starta timer', 'My activity stream' => 'Min aktivitetsström', - 'My calendar' => 'Min kalender', 'Search tasks' => 'Sök uppgifter', 'Reset filters' => 'Återställ filter', 'My tasks due tomorrow' => 'Mina uppgifter förfaller imorgon', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Översikts', 'Board/Calendar/List view' => 'Tavla/Kalender/Listvy', 'Switch to the board view' => 'Växla till tavelvy', - 'Switch to the calendar view' => 'Växla till kalendervy', 'Switch to the list view' => 'Växla till listvy', 'Go to the search/filter box' => 'Gå till sök/filter box', 'There is no activity yet.' => 'Det finns ingen aktivitet ännu.', diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index 4d8c7fd8..f9a537f0 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'ภาษา:', 'Timezone:' => 'เขตเวลา:', 'All columns' => 'คอลัมน์ทั้งหมด', - 'Calendar' => 'ปฏิทิน', 'Next' => 'ต่อไป', '#%d' => '#%d', 'All swimlanes' => 'สวิมเลนทั้งหมด', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'เมื่องานถูกย้ายจากคอลัมน์แรก', 'When task is moved to last column' => 'เมื่องานถูกย้ายไปคอลัมน์สุดท้าย', 'Year(s)' => 'ปี', - 'Calendar settings' => 'ตั้งค่าปฏิทิน', - 'Project calendar view' => 'มุมมองปฏิทินของโปรเจค', 'Project settings' => 'ตั้งค่าโปรเจค', - 'Show subtasks based on the time tracking' => 'แสดงงานย่อยในการติดตามเวลา', - 'Show tasks based on the creation date' => 'แสดงงานจากวันที่สร้าง', - 'Show tasks based on the start date' => 'แสดงงานจากวันที่เริ่ม', - 'Subtasks time tracking' => 'การติดตามเวลางานย่อย', - 'User calendar view' => 'มุมมองปฏิทินของผู้ใช้', 'Automatically update the start date' => 'ปรับปรุงวันที่เริ่มอัตโนมมัติ', // 'iCal feed' => '', // 'Preferences' => '', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'หยุดจับเวลา', 'Start timer' => 'เริ่มจับเวลา', 'My activity stream' => 'กิจกรรมที่เกิดขึ้นของฉัน', - 'My calendar' => 'ปฎิทินของฉัน', 'Search tasks' => 'ค้นหางาน', 'Reset filters' => 'ล้างตัวกรอง', 'My tasks due tomorrow' => 'งานถึงกำหนดของฉันวันพรุ่งนี้', @@ -684,7 +675,6 @@ return array( 'Overview' => 'ภาพรวม', 'Board/Calendar/List view' => 'มุมมอง บอร์ด/ปฎิทิน/ลิสต์', 'Switch to the board view' => 'เปลี่ยนเป็นมุมมองบอร์ด', - 'Switch to the calendar view' => 'เปลี่ยนเป็นมุมมองปฎิทิน', 'Switch to the list view' => 'เปลี่ยนเป็นมุมมองลิสต์', 'Go to the search/filter box' => 'ไปที่กล่องค้นหา/ตัวกรอง', 'There is no activity yet.' => 'ตอนนี้ไม่มีกิจกรรม', diff --git a/app/Locale/tr_TR/translations.php b/app/Locale/tr_TR/translations.php index 2b21c1ce..56971fd2 100644 --- a/app/Locale/tr_TR/translations.php +++ b/app/Locale/tr_TR/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => 'Dil:', 'Timezone:' => 'Saat dilimi:', 'All columns' => 'Tüm sütunlar', - 'Calendar' => 'Takvim', 'Next' => 'Sonraki', '#%d' => '#%d', 'All swimlanes' => 'Tüm Kulvarlar', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => 'Görev ilk sütundan taşındığı zaman', 'When task is moved to last column' => 'Görev son sütuna taşındığı zaman', 'Year(s)' => 'Yıl(lar)', - 'Calendar settings' => 'Takvim ayarları', - 'Project calendar view' => 'Proje takvim görünümü', 'Project settings' => 'Proje ayarları', - 'Show subtasks based on the time tracking' => 'Zaman takibi bazında alt görevleri göster', - 'Show tasks based on the creation date' => 'Oluşturulma zamanına göre görevleri göster', - 'Show tasks based on the start date' => 'Başlangıç zamanına göre görevleri göster', - 'Subtasks time tracking' => 'Alt görevler zaman takibi', - 'User calendar view' => 'Kullanıcı takvim görünümü', 'Automatically update the start date' => 'Başlangıç tarihini otomatik olarak güncelle', 'iCal feed' => 'iCal akışı', 'Preferences' => 'Ayarlar', @@ -670,7 +662,6 @@ return array( 'Stop timer' => 'Zamanlayıcıyı durdur', 'Start timer' => 'Zamanlayıcıyı başlat', 'My activity stream' => 'Olay akışım', - 'My calendar' => 'Takvimim', 'Search tasks' => 'Görevleri ara', 'Reset filters' => 'Filtreleri sıfırla', 'My tasks due tomorrow' => 'Yarına tamamlanması gereken görevlerim', @@ -684,7 +675,6 @@ return array( 'Overview' => 'Özet Görünüm', 'Board/Calendar/List view' => 'Pano/Takvim/Liste görünümü', 'Switch to the board view' => 'Pano görünümüne geç', - 'Switch to the calendar view' => 'Takvim görünümüne geç', 'Switch to the list view' => 'Liste görünümüne geç', 'Go to the search/filter box' => 'Arama/Filtreleme kutusuna git', 'There is no activity yet.' => 'Henüz bir aktivite yok.', diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index 2ca48673..908f7989 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -455,7 +455,6 @@ return array( 'Language:' => '语言:', 'Timezone:' => '时区:', 'All columns' => '全部栏目', - 'Calendar' => '日程表', 'Next' => '前进', '#%d' => '#%d', 'All swimlanes' => '全部里程碑', @@ -607,14 +606,7 @@ return array( 'When task is moved from first column' => '当任务从第一列任务栏移走时', 'When task is moved to last column' => '当任务移动到最后一列任务栏时', 'Year(s)' => '年', - 'Calendar settings' => '日程设置', - 'Project calendar view' => '项目日历表', 'Project settings' => '项目设置', - 'Show subtasks based on the time tracking' => '在时间跟踪上显示子任务', - 'Show tasks based on the creation date' => '显示任务创建日期于', - 'Show tasks based on the start date' => '显示任务开始日期于', - 'Subtasks time tracking' => '子任务时间跟踪', - 'User calendar view' => '用户日程视图', 'Automatically update the start date' => '自动更新开始日期', 'iCal feed' => '日历订阅', 'Preferences' => '偏好', @@ -670,7 +662,6 @@ return array( 'Stop timer' => '停止计时器', 'Start timer' => '开启计时器', 'My activity stream' => '我的活动流', - 'My calendar' => '我的日程表', 'Search tasks' => '搜索任务', 'Reset filters' => '重置过滤器', 'My tasks due tomorrow' => '我的明天到期的任务', @@ -684,7 +675,6 @@ return array( 'Overview' => '概览', 'Board/Calendar/List view' => '看板/日程/列表视图', 'Switch to the board view' => '切换到看板视图', - 'Switch to the calendar view' => '切换到日程视图', 'Switch to the list view' => '切换到列表视图', 'Go to the search/filter box' => '前往搜索/过滤箱', 'There is no activity yet.' => '当前无任何活动.', diff --git a/app/ServiceProvider/FormatterProvider.php b/app/ServiceProvider/FormatterProvider.php index 8af5f9fa..a65b1162 100644 --- a/app/ServiceProvider/FormatterProvider.php +++ b/app/ServiceProvider/FormatterProvider.php @@ -26,7 +26,6 @@ class FormatterProvider implements ServiceProviderInterface 'SubtaskListFormatter', 'SubtaskTimeTrackingCalendarFormatter', 'TaskAutoCompleteFormatter', - 'TaskCalendarFormatter', 'TaskGanttFormatter', 'TaskICalFormatter', 'TaskListFormatter', diff --git a/app/ServiceProvider/HelperProvider.php b/app/ServiceProvider/HelperProvider.php index 82b175cb..054c4009 100644 --- a/app/ServiceProvider/HelperProvider.php +++ b/app/ServiceProvider/HelperProvider.php @@ -19,7 +19,6 @@ class HelperProvider implements ServiceProviderInterface { $container['helper'] = new Helper($container); $container['helper']->register('app', '\Kanboard\Helper\AppHelper'); - $container['helper']->register('calendar', '\Kanboard\Helper\CalendarHelper'); $container['helper']->register('asset', '\Kanboard\Helper\AssetHelper'); $container['helper']->register('board', '\Kanboard\Helper\BoardHelper'); $container['helper']->register('comment', '\Kanboard\Helper\CommentHelper'); diff --git a/app/ServiceProvider/RouteProvider.php b/app/ServiceProvider/RouteProvider.php index 08759b22..28ced7fe 100644 --- a/app/ServiceProvider/RouteProvider.php +++ b/app/ServiceProvider/RouteProvider.php @@ -36,7 +36,6 @@ class RouteProvider implements ServiceProviderInterface $container['route']->addRoute('dashboard/:user_id/projects', 'DashboardController', 'projects'); $container['route']->addRoute('dashboard/:user_id/tasks', 'DashboardController', 'tasks'); $container['route']->addRoute('dashboard/:user_id/subtasks', 'DashboardController', 'subtasks'); - $container['route']->addRoute('dashboard/:user_id/calendar', 'DashboardController', 'calendar'); $container['route']->addRoute('dashboard/:user_id/activity', 'DashboardController', 'activity'); $container['route']->addRoute('dashboard/:user_id/notifications', 'DashboardController', 'notifications'); @@ -119,10 +118,6 @@ class RouteProvider implements ServiceProviderInterface $container['route']->addRoute('b/:project_id', 'BoardViewController', 'show'); $container['route']->addRoute('public/board/:token', 'BoardViewController', 'readonly'); - // Calendar routes - $container['route']->addRoute('calendar/:project_id', 'CalendarController', 'show'); - $container['route']->addRoute('c/:project_id', 'CalendarController', 'show'); - // Listing routes $container['route']->addRoute('list/:project_id', 'TaskListController', 'show'); $container['route']->addRoute('l/:project_id', 'TaskListController', 'show'); @@ -167,7 +162,6 @@ class RouteProvider implements ServiceProviderInterface $container['route']->addRoute('settings/project', 'ConfigController', 'project'); $container['route']->addRoute('settings/project', 'ConfigController', 'project'); $container['route']->addRoute('settings/board', 'ConfigController', 'board'); - $container['route']->addRoute('settings/calendar', 'ConfigController', 'calendar'); $container['route']->addRoute('settings/integrations', 'ConfigController', 'integrations'); $container['route']->addRoute('settings/webhook', 'ConfigController', 'webhook'); $container['route']->addRoute('settings/api', 'ConfigController', 'api'); diff --git a/app/Template/calendar/project.php b/app/Template/calendar/project.php deleted file mode 100644 index 769e019b..00000000 --- a/app/Template/calendar/project.php +++ /dev/null @@ -1,6 +0,0 @@ -projectHeader->render($project, 'CalendarController', 'show') ?> - -calendar->render( - $this->url->href('CalendarController', 'projectEvents', array('project_id' => $project['id'])), - $this->url->href('CalendarController', 'save', array('project_id' => $project['id'])) -) ?> diff --git a/app/Template/calendar/user.php b/app/Template/calendar/user.php deleted file mode 100644 index c68bd32d..00000000 --- a/app/Template/calendar/user.php +++ /dev/null @@ -1,4 +0,0 @@ -calendar->render( - $this->url->href('CalendarController', 'userEvents', array('user_id' => $user['id'])), - $this->url->href('CalendarController', 'save') -) ?> diff --git a/app/Template/config/calendar.php b/app/Template/config/calendar.php deleted file mode 100644 index 0cc3d064..00000000 --- a/app/Template/config/calendar.php +++ /dev/null @@ -1,36 +0,0 @@ - -
- - form->csrf() ?> - -
- - form->radios('calendar_project_tasks', array( - 'date_creation' => t('Show tasks based on the creation date'), - 'date_started' => t('Show tasks based on the start date'), - ), - $values - ) ?> -
- -
- - form->radios('calendar_user_tasks', array( - 'date_creation' => t('Show tasks based on the creation date'), - 'date_started' => t('Show tasks based on the start date'), - ), - $values - ) ?> -
- -
- - form->checkbox('calendar_user_subtasks_time_tracking', t('Show subtasks based on the time tracking'), 1, $values['calendar_user_subtasks_time_tracking'] == 1) ?> -
- -
- -
-
diff --git a/app/Template/config/keyboard_shortcuts.php b/app/Template/config/keyboard_shortcuts.php index 6ac71ee0..ed9ea541 100644 --- a/app/Template/config/keyboard_shortcuts.php +++ b/app/Template/config/keyboard_shortcuts.php @@ -6,7 +6,6 @@ diff --git a/app/Template/config/sidebar.php b/app/Template/config/sidebar.php index 95be963b..2f265ed2 100644 --- a/app/Template/config/sidebar.php +++ b/app/Template/config/sidebar.php @@ -15,9 +15,6 @@
  • app->checkMenuSelection('ConfigController', 'board') ?>> url->link(t('Board settings'), 'ConfigController', 'board') ?>
  • -
  • app->checkMenuSelection('ConfigController', 'calendar') ?>> - url->link(t('Calendar settings'), 'ConfigController', 'calendar') ?> -
  • app->checkMenuSelection('TagController', 'index') ?>> url->link(t('Tags management'), 'TagController', 'index') ?>
  • diff --git a/app/Template/dashboard/show.php b/app/Template/dashboard/show.php index 2cc78e3f..64b90516 100644 --- a/app/Template/dashboard/show.php +++ b/app/Template/dashboard/show.php @@ -16,9 +16,7 @@
  • modal->medium('dashboard', t('My activity stream'), 'ActivityController', 'user') ?>
  • -
  • - modal->medium('calendar', t('My calendar'), 'CalendarController', 'user') ?> -
  • + hook->render('template:dashboard:page-header:menu', array('user' => $user)) ?> diff --git a/app/Template/project/dropdown.php b/app/Template/project/dropdown.php index 72c687a1..39cb985c 100644 --- a/app/Template/project/dropdown.php +++ b/app/Template/project/dropdown.php @@ -4,9 +4,6 @@
  • url->icon('th', t('Board'), 'BoardViewController', 'show', array('project_id' => $project['id'])) ?>
  • -
  • - url->icon('calendar', t('Calendar'), 'CalendarController', 'show', array('project_id' => $project['id'])) ?> -
  • url->icon('list', t('Listing'), 'TaskListController', 'show', array('project_id' => $project['id'])) ?>
  • diff --git a/app/Template/project_header/views.php b/app/Template/project_header/views.php index 2684c744..f200801a 100644 --- a/app/Template/project_header/views.php +++ b/app/Template/project_header/views.php @@ -5,9 +5,6 @@
  • app->checkMenuSelection('BoardViewController') ?>> url->icon('th', t('Board'), 'BoardViewController', 'show', array('project_id' => $project['id'], 'search' => $filters['search']), false, 'view-board', t('Keyboard shortcut: "%s"', 'v b')) ?>
  • -
  • app->checkMenuSelection('CalendarController') ?>> - url->icon('calendar', t('Calendar'), 'CalendarController', 'project', array('project_id' => $project['id'], 'search' => $filters['search']), false, 'view-calendar', t('Keyboard shortcut: "%s"', 'v c')) ?> -
  • app->checkMenuSelection('TaskListController') ?>> url->icon('list', t('List'), 'TaskListController', 'show', array('project_id' => $project['id'], 'search' => $filters['search']), false, 'view-listing', t('Keyboard shortcut: "%s"', 'v l')) ?>
  • @@ -16,4 +13,5 @@ url->icon('sliders', t('Gantt'), 'TaskGanttController', 'show', array('project_id' => $project['id'], 'search' => $filters['search']), false, 'view-gantt', t('Keyboard shortcut: "%s"', 'v g')) ?> + hook->render('template:project-header:view-switcher', array('project' => $project, 'filters' => $filters)) ?> diff --git a/assets/css/vendor.min.css b/assets/css/vendor.min.css index 69ca4313..05775d4f 100644 --- a/assets/css/vendor.min.css +++ b/assets/css/vendor.min.css @@ -12,11 +12,6 @@ .ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.ui-timepicker-div dl dd{margin:0 10px 10px 40%}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:0 0;border:0;margin:0;padding:0}.ui-timepicker-div .ui_tpicker_unit_hide{display:none}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input{background:0 0;color:inherit;border:0;outline:0;border-bottom:solid 1px #555;width:95%}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus{border-bottom-color:#aaa}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right;padding:0 5px 0 0}.ui-timepicker-rtl dl dt{float:right;clear:right}.ui-timepicker-rtl dl dd{margin:0 40% 10px 10px}.ui-timepicker-div.ui-timepicker-oneLine{padding-right:2px}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,.ui-timepicker-div.ui-timepicker-oneLine dt{display:none}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label{display:block;padding-top:2px}.ui-timepicker-div.ui-timepicker-oneLine dl{text-align:right}.ui-timepicker-div.ui-timepicker-oneLine dl dd,.ui-timepicker-div.ui-timepicker-oneLine dl dd>div{display:inline-block;margin:0}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before{content:':';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before{content:'.';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{display:none} .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} -/*! - * FullCalendar v3.2.0 Stylesheet - * Docs & License: https://fullcalendar.io/ - * (c) 2017 Adam Shaw - */.fc-icon,body .fc{font-size:1em}.fc-button-group,.fc-icon{display:inline-block}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-icon,.fc-unselectable{-khtml-user-select:none;-webkit-touch-callout:none}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view td.fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc-icon{height:1em;line-height:1em;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\02039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\0203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\000AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\000BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\000D7";font-size:200%;top:6%}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a[data-goto]{cursor:pointer}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent;border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad;font-weight:400}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover,.ui-widget .fc-event{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item:hover td{background-color:#f5f5f5}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} /*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) diff --git a/assets/js/app.min.js b/assets/js/app.min.js index 05577b8f..7a814e40 100644 --- a/assets/js/app.min.js +++ b/assets/js/app.min.js @@ -1,3 +1,3 @@ -!function(){function t(t,a,i){if(!n)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");var r=i&&i.debug||!1;if(r){var d=document.querySelector("#input-textarea-caret-position-mirror-div");d&&d.parentNode.removeChild(d)}var s=document.createElement("div");s.id="input-textarea-caret-position-mirror-div",document.body.appendChild(s);var l=s.style,c=window.getComputedStyle?getComputedStyle(t):t.currentStyle;l.whiteSpace="pre-wrap","INPUT"!==t.nodeName&&(l.wordWrap="break-word"),l.position="absolute",r||(l.visibility="hidden"),e.forEach(function(t){l[t]=c[t]}),o?t.scrollHeight>parseInt(c.height)&&(l.overflowY="scroll"):l.overflow="hidden",s.textContent=t.value.substring(0,a),"INPUT"===t.nodeName&&(s.textContent=s.textContent.replace(/\s/g," "));var u=document.createElement("span");u.textContent=t.value.substring(a)||".",s.appendChild(u);var p={top:u.offsetTop+parseInt(c.borderTopWidth),left:u.offsetLeft+parseInt(c.borderLeftWidth)};return r?u.style.backgroundColor="#aaa":document.body.removeChild(s),p}var e=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],n="undefined"!=typeof window,o=n&&null!=window.mozInnerScreenX;"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=t:n&&(window.getCaretCoordinates=t)}(),function(){function t(){if(!("KeyboardEvent"in window)||"key"in KeyboardEvent.prototype)return!1;var t={get:function(t){var e=n.keys[this.which||this.keyCode];return Array.isArray(e)&&(e=e[+this.shiftKey]),e}};return Object.defineProperty(KeyboardEvent.prototype,"key",t),t}var e,n={polyfill:t,keys:{3:"Cancel",6:"Help",8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",28:"Convert",29:"NonConvert",30:"Accept",31:"ModeChange",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",41:"Select",42:"Print",43:"Execute",44:"PrintScreen",45:"Insert",46:"Delete",48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],91:"OS",93:"ContextMenu",144:"NumLock",145:"ScrollLock",181:"VolumeMute",182:"VolumeDown",183:"VolumeUp",186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"'],224:"Meta",225:"AltGraph",246:"Attn",247:"CrSel",248:"ExSel",249:"EraseEof",250:"Play",251:"ZoomOut"}};for(e=1;e<25;e++)n.keys[111+e]="F"+e;var o="";for(e=65;e<91;e++)o=String.fromCharCode(e),n.keys[e]=[o.toLowerCase(),o.toUpperCase()];n.polyfill()}(),Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector||function(t){for(var e=(this.document||this.ownerDocument).querySelectorAll(t),n=e.length;--n>=0&&e.item(n)!==this;);return n>-1});var KB={components:{},utils:{},html:{},http:{},listeners:{clicks:{},changes:{},keys:[],internals:{}}};KB.on=function(t,e){this.listeners.internals.hasOwnProperty(t)||(this.listeners.internals[t]=[]),this.listeners.internals[t].push(e)},KB.trigger=function(t,e){if(this.listeners.internals.hasOwnProperty(t))for(var n=0;n0){for(var i=!0,r=0;r-1)window.location=e.split("#")[0];else if(e)window.location=e;else if(n)window.location=n;else if("application/json"===t.getResponseHeader("Content-Type"))try{return JSON.parse(t.responseText)}catch(t){}return t.responseText}var i=function(){},r=function(){};this.execute=function(){var d=new XMLHttpRequest;d.open(t,e,!0),d.setRequestHeader("X-Requested-With","XMLHttpRequest");for(var s in n)n.hasOwnProperty(s)&&d.setRequestHeader(s,n[s]);return d.onerror=function(){r()},d.onreadystatechange=function(){if(d.readyState===XMLHttpRequest.DONE){var t=a(d);200===d.status?i(t):r(t)}},d.send(o),this},this.success=function(t){return i=t,this},this.error=function(t){return r=t,this}},KB.http.get=function(t){return new KB.http.request("GET",t).execute()},KB.http.postJson=function(t,e){var n={"Content-Type":"application/json",Accept:"application/json"};return new KB.http.request("POST",t,n,JSON.stringify(e)).execute()},KB.http.postForm=function(t,e){var n=new FormData(e);return new KB.http.request("POST",t,{},n).execute()},KB.http.uploadFile=function(t,e,n,o,a,i){var r=new FormData;r.append("files[]",e);var d=new XMLHttpRequest;d.upload.addEventListener("progress",n),d.upload.addEventListener("error",a),d.open("POST",t,!0),d.setRequestHeader("X-Requested-With","XMLHttpRequest"),d.onreadystatechange=function(){d.readyState===XMLHttpRequest.DONE&&(200===d.status?o():"undefined"!=typeof i&&i(JSON.parse(d.responseText)))},d.send(r)},function(){function t(t){t.target.matches("#modal-overlay")&&(t.stopPropagation(),t.preventDefault(),s())}function e(){KB.trigger("modal.close")}function n(){KB.trigger("modal.loading"),a()}function o(){return document.querySelector("#modal-content form:not(.js-modal-ignore-form)")}function a(){var t=o();if(t){var e=t.getAttribute("action");e&&KB.http.postForm(e,t).success(function(t){KB.trigger("modal.stop"),t?r(t):s()})}}function i(){var t=KB.find("#modal-content form");t&&t.on("submit",n,!1);var e=document.querySelector("#modal-content input[autofocus]");e&&e.focus(),KB.render(),_KB.datePicker(),_KB.autoComplete(),_KB.tagAutoComplete(),_KB.get("Task").onPopoverOpened()}function r(t){var e=KB.find("#modal-content");e&&(e.replace(KB.dom("div").attr("id","modal-content").html(t).build()),i())}function d(n,o,a){var r=KB.dom("a").attr("href","#").attr("id","modal-close-button").html('').click(e).build(),d=KB.dom("div").attr("id","modal-header").add(r).build(),s=KB.dom("div").attr("id","modal-content").html(n).build(),l=KB.dom("div").attr("id","modal-box").style("width",o).add(d).add(s).build(),c=KB.dom("div").attr("id","modal-overlay").add(l).build();a&&c.addEventListener("click",t,!1),document.body.appendChild(c),i()}function s(){c=!1;var t=KB.find("#modal-overlay");t&&t.remove()}function l(t){var e=KB.utils.getViewportSize();if(e.width<700)return"99%";switch(t){case"large":return e.width<1350?"98%":"1350px";case"medium":return e.width<1024?"70%":"1024px"}return e.width<800?"75%":"800px"}var c=!1;KB.on("modal.close",function(){s()}),KB.on("modal.submit",function(){a()}),KB.modal={open:function(t,e,n){_KB.get("Dropdown").close(),s(),"undefined"==typeof n&&(n=!0),KB.http.get(t).success(function(t){c=!0,d(t,l(e),n)})},close:function(){s()},isOpen:function(){return c},replace:function(t){KB.http.get(t).success(function(t){r(t)})},getForm:o,submitForm:a}}(),KB.utils.formatDuration=function(t){return t>=86400?Math.round(t/86400)+"d":t>=3600?Math.round(t/3600)+"h":t>=60?Math.round(t/60)+"m":t+"s"},KB.utils.getSelectionPosition=function(t){var e,n;return e=t.value.length0&&o.push([l]):s>0?(o[s].push(l),"undefined"==typeof o[0][d]&&o[0].push(0),o[0][d]+=l):a.push(r(i.parse(l)))}KB.dom(t).add(KB.dom("div").attr("id","chart").build()),c3.generate({data:{columns:o},axis:{x:{type:"category",categories:a}}})}}),KB.component("chart-project-cumulative-flow",function(t,e){this.render=function(){for(var n=e.metrics,o=[],a=[],i=[],r=d3.time.format("%Y-%m-%d"),d=d3.time.format(e.dateFormat),s=0;s0&&(a.push(c),o.push([c])):l>0?o[l-1].push(c):i.push(d(r.parse(c)))}KB.dom(t).add(KB.dom("div").attr("id","chart").build()),c3.generate({data:{columns:o.reverse(),type:"area-spline",groups:[a],order:null},axis:{x:{type:"category",categories:i}}})}}),KB.component("chart-project-lead-cycle-time",function(t,e){this.render=function(){var n=e.metrics,o=[e.labelCycle],a=[e.labelLead],i=[],r={};r[e.labelCycle]="area",r[e.labelLead]="area-spline";var d={};d[e.labelLead]="#afb42b",d[e.labelCycle]="#4e342e";for(var s=0;s'+e+"")}})}}),KB.component("file-upload",function(t,e){function n(t){if(t.lengthComputable){var e=t.loaded/t.total,n=Math.floor(100*e);KB.find("#file-progress-"+w).attr("value",e),KB.find("#file-percentage-"+w).replaceText("("+n+"%)")}}function o(){var t=KB.dom("div").addClass("file-error").text(e.labelUploadError).build();KB.find("#file-item-"+w).add(t)}function a(t){var e=KB.dom("div").addClass("file-error").text(t.message).build();KB.find("#file-item-"+w).add(e),KB.trigger("modal.stop")}function i(){if(w++,w0&&KB.http.uploadFile(e.url,y[w],n,i,o,a)}function f(){y.length>0?(KB.trigger("modal.enable"),KB.dom(B).empty().add(b())):(KB.trigger("modal.disable"),KB.dom(B).empty().add(h()))}function m(){return KB.dom("input").attr("id","file-input-element").attr("type","file").attr("name","files[]").attr("multiple",!0).on("change",s).hide().build()}function h(){var t=KB.dom("a").attr("href","#").text(e.labelChooseFiles).click(l).build();return KB.dom("div").attr("id","file-dropzone-inner").text(e.labelDropzone+" "+e.labelOr+" ").add(t).build()}function g(){var t=KB.dom("div").attr("id","file-dropzone").add(h()).build();return t.ondragover=c,t.ondrop=u,t.ondragover=c,t}function v(t){var n=!1,o=KB.dom("progress").attr("id","file-progress-"+t).attr("value",0).build(),a=KB.dom("span").attr("id","file-percentage-"+t).text("(0%)").build(),i=KB.dom("li").attr("id","file-item-"+t).add(o).text(" "+y[t].name+" ").add(a);return y[t].size>e.maxSize&&(i.add(KB.dom("div").addClass("file-error").text(e.labelOversize).build()),n=!0),n&&KB.trigger("modal.disable"),i.build()}function b(){for(var t=KB.dom("ul").attr("id","file-list").build(),e=0;e=e.images.length&&(n=0),p=e.images[n];break}d()}function r(){s();for(var t=0;t1&&("INPUT"!==document.activeElement.tagName&&"TEXTAREA"!==document.activeElement.tagName||$(document.activeElement).parents("form").submit())}}KB.onKey("?",function(){KB.modal.isOpen()||KB.modal.open(KB.find("body").data("keyboardShortcutUrl"))}),KB.onKey("Escape",function(){KB.exists("#suggest-menu")||(KB.trigger("modal.close"),_KB.get("Dropdown").close())}),KB.onKey("Enter",e,!0,!0),KB.onKey("Enter",e,!0,!1,!0),KB.onKey("b",function(){KB.modal.isOpen()||KB.trigger("board.selector.open")}),KB.exists("#board")&&(KB.onKey("c",function(){KB.modal.isOpen()||_KB.get("BoardHorizontalScrolling").toggle()}),KB.onKey("s",function(){KB.modal.isOpen()||_KB.get("BoardCollapsedMode").toggle()}),KB.onKey("n",function(){KB.modal.isOpen()||KB.modal.open(KB.find("#board").data("taskCreationUrl"),"large",!1)})),KB.exists("#task-view")&&(KB.onKey("e",function(){KB.modal.isOpen()||KB.modal.open(KB.find("#task-view").data("editUrl"),"large",!1)}),KB.onKey("c",function(){KB.modal.isOpen()||KB.modal.open(KB.find("#task-view").data("commentUrl"),"medium",!1)}),KB.onKey("s",function(){KB.modal.isOpen()||KB.modal.open(KB.find("#task-view").data("subtaskUrl"),"medium",!1)}),KB.onKey("l",function(){KB.modal.isOpen()||KB.modal.open(KB.find("#task-view").data("internalLinkUrl"),"medium",!1)})),KB.onKey("f",function(){KB.modal.isOpen()||KB.focus("#form-search")}),KB.onKey("r",function(){if(!KB.modal.isOpen()){var t=$(".filter-reset").data("filter"),e=$("#form-search");e.val(t),$("form.search").submit()}}),KB.onKey("v+o",function(){t("a.view-overview")}),KB.onKey("v+b",function(){t("a.view-board")}),KB.onKey("v+c",function(){t("a.view-calendar")}),KB.onKey("v+l",function(){t("a.view-listing")}),KB.onKey("v+g",function(){t("a.view-gantt")})},function(){function t(t){return"I"===t.target.tagName?t.target.parentNode.getAttribute("href"):t.target.getAttribute("href")}KB.onClick(".js-modal-large",function(e){KB.modal.open(t(e),"large",!1)}),KB.onClick(".js-modal-medium",function(e){KB.modal.isOpen()?KB.modal.replace(t(e)):KB.modal.open(t(e),"medium",!1)}),KB.onClick(".js-modal-small",function(e){KB.modal.open(t(e),"small",!1)}),KB.onClick(".js-modal-confirm",function(e){KB.modal.open(t(e),"small")}),KB.onClick(".js-modal-close",function(){KB.modal.close()}),KB.onClick(".js-modal-replace",function(e){var n=t(e);KB.modal.isOpen()?KB.modal.replace(n):window.location.href=n})}(),KB.onChange(".js-project-creation-select-options",function(t){var e=t.value;"0"===e?KB.find(".js-project-creation-options").hide():KB.find(".js-project-creation-options").show()}),KB.component("project-select-role",function(t,e){function n(t){d=!0,e.role=t.value,a(),o()}function o(){KB.http.postJson(e.url,{id:e.id,role:e.role}).success(function(){d=!1,s=!0,a()}).error(function(){d=!1,s=!1,l=!0,a()})}function a(){KB.dom(r).remove(),r=i(),t.appendChild(r)}function i(){var t=[],o=KB.dom("div");for(var a in e.roles)if(e.roles.hasOwnProperty(a)){var i={value:a,text:e.roles[a]};e.role===a&&(i.selected="selected"),t.push(i)}return o.add(KB.dom("select").change(n).for("option",t).build()),d?(o.text(" "),o.add(KB.dom("i").attr("class","fa fa-spinner fa-pulse fa-fw").build())):s?(o.text(" "),o.add(KB.dom("i").attr("class","fa fa-check fa-fw icon-fade-out icon-success").build())):l&&(o.text(" "),o.add(KB.dom("i").attr("class","fa fa-check fa-fw icon-fade-out icon-error").build())),o.build()}var r,d=!1,s=!1,l=!1;this.render=function(){r=i(),t.appendChild(r)}}),KB.component("screenshot",function(t){function e(t){d(t.target.result)}function n(t){if(t.clipboardData&&t.clipboardData.items){var n=t.clipboardData.items;if(n)for(var o=0;o0&&(t.index=t.index-1),KB.dom(t.items[t.index]).addClass("active")}function m(){var t=p();t.indexo?1:0}):n.sort(function(t,e){var n=t["data-label"].toLowerCase(),o=e["data-label"].toLowerCase();return no?1:0}),n}function g(t,n){for(var o=[],a=!1,i=0;i-1){var r=n[i];"undefined"!=typeof e.defaultValue&&String(e.defaultValue)===r["data-value"]&&(r.class+=" active",a=!0),o.push(r)}return!a&&o.length>0&&(o[0].class+=" active"),o}function v(){var t=g(w.value,h(e.items)),n=y.getBoundingClientRect();return 0===t.length?null:KB.dom("ul").attr("id","select-dropdown-menu").style("top",document.body.scrollTop+n.bottom+"px").style("left",n.left+"px").style("width",n.width+"px").style("maxHeight",window.innerHeight-n.bottom-20+"px").mouseover(d).click(s).for("li",t).build(); -}function b(){var t=KB.find("#select-dropdown-menu");null!==t&&t.remove(),document.removeEventListener("keydown",i,!1),document.removeEventListener("click",l,!1)}function K(){var t=v();null!==t&&document.body.appendChild(t),document.addEventListener("keydown",i,!1),document.addEventListener("click",l,!1)}function B(){return e.defaultValue&&e.defaultValue in e.items?e.items[e.defaultValue]:e.placeholder?e.placeholder:""}var y,w,k,x,C;this.render=function(){KB.on("select.dropdown.loading.start",n),KB.on("select.dropdown.loading.stop",o),KB.on("modal.close",function(){KB.removeListener("select.dropdown.loading.start",n),KB.removeListener("select.dropdown.loading.stop",o)}),x=KB.dom("i").attr("class","fa fa-chevron-down select-dropdown-chevron").click(c).build(),C=KB.dom("span").hide().addClass("select-loading-icon").add(KB.dom("i").attr("class","fa fa-spinner fa-pulse").build()).build(),k=KB.dom("input").attr("type","hidden").attr("name",e.name).attr("value",e.defaultValue||"").build(),w=KB.dom("input").attr("type","text").attr("placeholder",B()).addClass("select-dropdown-input").style("width",t.offsetWidth-30+"px").on("focus",c).on("input",r,!0).build(),y=KB.dom("div").addClass("select-dropdown-input-container").add(k).add(w).add(x).add(C).build(),t.appendChild(y),e.onFocus&&e.onFocus.forEach(function(t){KB.on(t,function(){w.focus()})}),window.addEventListener("scroll",a,!1)}}),KB.interval(60,function(){var t=KB.find("body").data("statusUrl"),e=KB.find("body").data("loginUrl");null===KB.find(".form-login")&&KB.http.get(t).error(function(){window.location=e})}),KB.component("submit-buttons",function(t,e){function n(){u=!0,c(),KB.trigger("modal.submit")}function o(){KB.trigger("modal.close")}function a(){u=!1,c()}function i(){u=!1,p=!0,c()}function r(){u=!1,p=!1,c()}function d(){KB.dom(m).hide()}function s(t){f=t.submitLabel,c()}function l(){var t=KB.dom("button").attr("type","submit").attr("class","btn btn-"+(e.color||"blue"));return KB.modal.isOpen()&&t.click(n),e.tabindex&&t.attr("tabindex",e.tabindex),u&&t.disable().add(KB.dom("i").attr("class","fa fa-spinner fa-pulse").build()).text(" "),p&&t.disable(),t.text(f).build()}function c(){var t=l();KB.dom(h).replace(t),h=t}var u=!1,p=e.disabled||!1,f=e.submitLabel,m=null,h=null;this.render=function(){KB.on("modal.stop",a),KB.on("modal.disable",i),KB.on("modal.enable",r),KB.on("modal.hide",d),KB.on("modal.submit.label",s),KB.on("modal.close",function(){KB.removeListener("modal.stop",a),KB.removeListener("modal.disable",i),KB.removeListener("modal.enable",r),KB.removeListener("modal.hide",d),KB.removeListener("modal.submit.label",s)}),h=l();var n=KB.dom("div").attr("class","form-actions").add(h);KB.modal.isOpen()&&n.text(" "+e.orLabel+" ").add(KB.dom("a").attr("href","#").click(o).text(e.cancelLabel).build()),m=n.build(),t.appendChild(m)}}),KB.on("dom.ready",function(){function t(t,e){var n=$(".subtasks-table").data("save-position-url");$.ajax({cache:!1,url:n,contentType:"application/json",type:"POST",processData:!1,data:JSON.stringify({subtask_id:t,position:e})})}$(".draggable-row-handle").mouseenter(function(){$(this).parent().parent().addClass("draggable-item-hover")}).mouseleave(function(){$(this).parent().parent().removeClass("draggable-item-hover")}),$(".subtasks-table tbody").sortable({forcePlaceholderSize:!0,handle:"td:first i",helper:function(t,e){return e.children().each(function(){$(this).width($(this).width())}),e},stop:function(e,n){var o=n.item;o.removeClass("draggable-item-selected"),t(o.data("subtask-id"),o.index()+1)},start:function(t,e){e.item.addClass("draggable-item-selected")}}).disableSelection()}),KB.on("dom.ready",function(){$(document).on("click",".js-subtask-toggle-status",function(t){var e=$(this),n=e.attr("href");t.preventDefault(),$.ajax({cache:!1,url:n,success:function(t){n.indexOf("fragment=table")!=-1?$(".subtasks-table").replaceWith(t):n.indexOf("fragment=rows")!=-1?$(e).closest(".task-list-subtasks").replaceWith(t):$(e).closest(".subtask-title").replaceWith(t)}})}),$(document).on("click",".js-subtask-toggle-timer",function(t){var e=$(this);t.preventDefault(),$.ajax({cache:!1,url:e.attr("href"),success:function(t){$(e).closest(".subtask-time-tracking").replaceWith(t)}})})}),KB.component("suggest-menu",function(t,e){function n(t){switch(KB.utils.getKey(t)){case"Escape":u();break;case"ArrowUp":t.preventDefault(),t.stopImmediatePropagation(),l();break;case"ArrowDown":t.preventDefault(),t.stopImmediatePropagation(),c();break;case"Enter":t.preventDefault(),t.stopImmediatePropagation(),i()}}function o(){i()}function a(t){KB.dom(t).hasClass("suggest-menu-item")&&(KB.find(".suggest-menu-item.active").removeClass("active"),KB.dom(t).addClass("active"))}function i(){t.focus();var e=KB.find(".suggest-menu-item.active"),n=e.data("value"),o=e.data("trigger"),a=t.value,i=r(t),d=o+n+" ",s=KB.utils.getSelectionPosition(t),l=a.substring(0,s.selectionStart-i.length),c=a.substring(s.selectionEnd),p=l.length+d.length;t.value=l+d+c,t.setSelectionRange(p,p),u()}function r(t){var e=t.value.substring(0,t.selectionEnd).split("\n"),n=e[e.length-1],o=n.split(" ");return o[o.length-1]}function d(){for(var t=["#modal-content form","#modal-content","body"],e=0;e0&&(t.index=t.index-1),KB.dom(t.items[t.index]).addClass("active")}function c(){var t=s();t.index0&&b(v(t,n))}function g(t,e){var n=[];if(0===t.length)return e;for(var o=0;o0&&r.add(KB.html.label(e.positionLabel,"form-position")).add(KB.dom("select").attr("id","form-position").for("option",t).build()).add(KB.html.radio(e.beforeLabel,"positionChoice","before")).add(KB.html.radio(e.afterLabel,"positionChoice","after")),r.build()}this.render=function(){KB.on("modal.submit",c),KB.on("modal.close",function(){KB.removeListener("modal.submit",c)});var n=KB.dom("div").add(KB.dom("div").attr("id","message-container").build()).add(KB.html.label(e.swimlaneLabel,"form-swimlanes")).add(u()).add(KB.html.label(e.columnLabel,"form-columns")).add(p()).add(f()).build();t.appendChild(n)}}),KB.component("text-editor",function(t,e){function n(){var t=KB.dom("div").attr("class","text-editor-toolbar").for("a",[{href:"#",html:' '+e.labelWrite,click:function(){a()}}]).build();return h=KB.dom("div").attr("class","text-editor-preview-area markdown").build(),KB.dom("div").attr("class","text-editor-view-mode").add(t).add(h).hide().build()}function o(){var t=KB.dom("div").attr("class","text-editor-toolbar").for("a",[{href:"#",html:' '+e.labelPreview,click:function(){a()}},{href:"#",html:'',click:function(){d("**")}},{href:"#",html:'',click:function(){d("_")}},{href:"#",html:'',click:function(){d("~~")}},{href:"#",html:'',click:function(){l("> ")}},{href:"#",html:'',click:function(){l("* ")}},{href:"#",html:'',click:function(){s("```")}}]).build(),n=KB.dom("textarea");return n.attr("name",e.name),e.tabindex&&n.attr("tabindex",e.tabindex),e.required&&n.attr("required","required"),n.text(e.text),e.placeholder&&n.attr("placeholder",e.placeholder),p=n.build(),e.suggestOptions&&KB.getComponent("suggest-menu",p,e.suggestOptions).render(),KB.dom("div").attr("class","text-editor-write-mode").add(t).add(p).build()}function a(){KB.dom(h).html(marked(p.value,{sanitize:!0})),KB.dom(f).toggle(),KB.dom(m).toggle()}function i(){return p.value.substring(p.selectionStart,p.selectionEnd)}function r(t,e,n,o){return t.substring(0,e)+o+t.substring(n)}function d(t){var e=i();c(t+e+t),u(t)}function s(t){var e=i();c("\n"+t+"\n"+e+"\n"+t),u(t,2)}function l(t){var e=i();if(e.indexOf("\n")===-1)c("\n"+t+e);else{for(var n=e.split("\n"),o=0;o ')},Kanboard.App.prototype.hideLoadingIcon=function(){$("#app-loading-icon").remove()},Kanboard.BoardCollapsedMode=function(t){this.app=t},Kanboard.BoardCollapsedMode.prototype.toggle=function(){var t=this;this.app.showLoadingIcon(),$.ajax({cache:!1,url:$('.filter-display-mode:not([style="display: none;"]) a').attr("href"),success:function(e){$(".filter-display-mode").toggle(),t.app.get("BoardDragAndDrop").refresh(e)}})},Kanboard.BoardColumnView=function(t){this.app=t},Kanboard.BoardColumnView.prototype.execute=function(){this.app.hasId("board")&&this.render()},Kanboard.BoardColumnView.prototype.listen=function(){var t=this;$(document).on("click",".board-toggle-column-view",function(){t.toggle($(this).data("column-id"))})},Kanboard.BoardColumnView.prototype.onBoardRendered=function(){this.render()},Kanboard.BoardColumnView.prototype.render=function(){var t=this;$(".board-column-header").each(function(){var e=$(this).data("column-id");localStorage.getItem("hidden_column_"+e)&&t.hideColumn(e)})},Kanboard.BoardColumnView.prototype.toggle=function(t){localStorage.getItem("hidden_column_"+t)?this.showColumn(t):this.hideColumn(t),this.app.get("BoardDragAndDrop").dragAndDrop()},Kanboard.BoardColumnView.prototype.hideColumn=function(t){$(".board-column-"+t+" .board-column-expanded").hide(),$(".board-column-"+t+" .board-column-collapsed").show(),$(".board-column-header-"+t+" .board-column-expanded").hide(),$(".board-column-header-"+t+" .board-column-collapsed").show(),$(".board-column-header-"+t).each(function(){$(this).removeClass("board-column-compact"),$(this).addClass("board-column-header-collapsed")}),$(".board-column-"+t).each(function(){$(this).addClass("board-column-task-collapsed")}),$(".board-column-"+t+" .board-rotation").each(function(){$(this).css("width",$(".board-column-"+t).height())}),localStorage.setItem("hidden_column_"+t,1)},Kanboard.BoardColumnView.prototype.showColumn=function(t){$(".board-column-"+t+" .board-column-expanded").show(),$(".board-column-"+t+" .board-column-collapsed").hide(),$(".board-column-header-"+t+" .board-column-expanded").show(),$(".board-column-header-"+t+" .board-column-collapsed").hide(),$(".board-column-header-"+t).removeClass("board-column-header-collapsed"),$(".board-column-"+t).removeClass("board-column-task-collapsed"),0==localStorage.getItem("horizontal_scroll")&&$(".board-column-header-"+t).addClass("board-column-compact"),localStorage.removeItem("hidden_column_"+t)},Kanboard.BoardHorizontalScrolling=function(t){this.app=t},Kanboard.BoardHorizontalScrolling.prototype.execute=function(){this.app.hasId("board")&&this.render()},Kanboard.BoardHorizontalScrolling.prototype.listen=function(){var t=this;$(document).on("click",".filter-toggle-scrolling",function(e){e.preventDefault(),t.toggle()})},Kanboard.BoardHorizontalScrolling.prototype.onBoardRendered=function(){this.render()},Kanboard.BoardHorizontalScrolling.prototype.toggle=function(){var t=localStorage.getItem("horizontal_scroll")||1;localStorage.setItem("horizontal_scroll",0==t?1:0),this.render()},Kanboard.BoardHorizontalScrolling.prototype.render=function(){0==localStorage.getItem("horizontal_scroll")?($(".filter-wide").show(),$(".filter-compact").hide(),$("#board-container").addClass("board-container-compact"),$("#board th:not(.board-column-header-collapsed)").addClass("board-column-compact")):($(".filter-wide").hide(),$(".filter-compact").show(),$("#board-container").removeClass("board-container-compact"),$("#board th").removeClass("board-column-compact"))},Kanboard.BoardPolling=function(t){this.app=t},Kanboard.BoardPolling.prototype.execute=function(){if(this.app.hasId("board")){var t=parseInt($("#board").attr("data-check-interval"));t>0&&window.setInterval(this.check.bind(this),1e3*t)}},Kanboard.BoardPolling.prototype.check=function(){if(KB.utils.isVisible()&&!this.app.get("BoardDragAndDrop").savingInProgress){var t=this;this.app.showLoadingIcon(),$.ajax({cache:!1,url:$("#board").data("check-url"),statusCode:{200:function(e){t.app.get("BoardDragAndDrop").refresh(e)},304:function(){t.app.hideLoadingIcon()}}})}},Kanboard.Column=function(t){this.app=t},Kanboard.Column.prototype.listen=function(){this.dragAndDrop()},Kanboard.Column.prototype.dragAndDrop=function(){var t=this;$(".draggable-row-handle").mouseenter(function(){$(this).parent().parent().addClass("draggable-item-hover")}).mouseleave(function(){$(this).parent().parent().removeClass("draggable-item-hover")}),$(".columns-table tbody").sortable({forcePlaceholderSize:!0,handle:"td:first i",helper:function(t,e){return e.children().each(function(){$(this).width($(this).width())}),e},stop:function(e,n){var o=n.item;o.removeClass("draggable-item-selected"),t.savePosition(o.data("column-id"),o.index()+1)},start:function(t,e){e.item.addClass("draggable-item-selected")}}).disableSelection()},Kanboard.Column.prototype.savePosition=function(t,e){var n=$(".columns-table").data("save-position-url"),o=this;this.app.showLoadingIcon(),$.ajax({cache:!1,url:n,contentType:"application/json",type:"POST",processData:!1,data:JSON.stringify({column_id:t,position:e}),complete:function(){o.app.hideLoadingIcon()}})},Kanboard.Dropdown=function(t){this.app=t},Kanboard.Dropdown.prototype.listen=function(){var t=this;$(document).on("click",function(){t.close()}),$(document).on("click",".dropdown-menu",function(e){e.preventDefault(),e.stopImmediatePropagation(),t.close();var n=$(this).next("ul"),o=$(this).offset();$("body").append(jQuery("
    ",{id:"dropdown"})),n.clone().appendTo("#dropdown");var a=$("#dropdown ul");a.addClass("dropdown-submenu-open");var i=a.outerHeight(),r=a.outerWidth();o.top+i-$(window).scrollTop()<$(window).height()||$(window).scrollTop()+o.top$(window).width()?a.css("left",o.left-r+$(this).outerWidth()):a.css("left",o.left)}),$(document).on("click",".dropdown-submenu-open li",function(t){$(t.target).is("li")&&$(this).find("a:visible")[0].click()})},Kanboard.Dropdown.prototype.close=function(){$("#dropdown").remove()},Kanboard.Gantt=function(t){this.app=t,this.data=[],this.options={container:"#gantt-chart",showWeekends:!0,allowMoves:!0,allowResizes:!0,cellWidth:21,cellHeight:31,slideWidth:1e3,vHeaderWidth:200}},Kanboard.Gantt.prototype.execute=function(){this.app.hasId("gantt-chart")&&this.show()},Kanboard.Gantt.prototype.saveRecord=function(t){this.app.showLoadingIcon(),$.ajax({cache:!1,url:$(this.options.container).data("save-url"),contentType:"application/json",type:"POST",processData:!1,data:JSON.stringify(t),complete:this.app.hideLoadingIcon.bind(this)})},Kanboard.Gantt.prototype.show=function(){this.data=this.prepareData($(this.options.container).data("records"));var t=Math.floor(this.options.slideWidth/this.options.cellWidth+5),e=this.getDateRange(t),n=e[0],o=e[1],a=$(this.options.container),i=jQuery("
    ",{class:"ganttview"});i.append(this.renderVerticalHeader()),i.append(this.renderSlider(n,o)),a.append(i),jQuery("div.ganttview-grid-row div.ganttview-grid-row-cell:last-child",a).addClass("last"),jQuery("div.ganttview-hzheader-days div.ganttview-hzheader-day:last-child",a).addClass("last"),jQuery("div.ganttview-hzheader-months div.ganttview-hzheader-month:last-child",a).addClass("last"),$(this.options.container).data("readonly")?(this.options.allowResizes=!1,this.options.allowMoves=!1):(this.listenForBlockResize(n),this.listenForBlockMove(n))},Kanboard.Gantt.prototype.renderVerticalHeader=function(){for(var t=jQuery("
    ",{class:"ganttview-vtheader"}),e=jQuery("
    ",{class:"ganttview-vtheader-item"}),n=jQuery("
    ",{class:"ganttview-vtheader-series"}),o=0;o").append(jQuery("",{class:"fa fa-info-circle tooltip",title:this.getVerticalHeaderTooltip(this.data[o])})).append(" ");"task"==this.data[o].type?a.append(jQuery("",{href:this.data[o].link,title:this.data[o].title}).text(this.data[o].title)):a.append(jQuery("",{href:this.data[o].board_link,title:$(this.options.container).data("label-board-link")}).append('')).append(" ").append(jQuery("",{href:this.data[o].gantt_link,title:$(this.options.container).data("label-gantt-link")}).append('')).append(" ").append(jQuery("",{href:this.data[o].link}).text(this.data[o].title)),n.append(jQuery("
    ",{class:"ganttview-vtheader-series-name"}).append(a))}return e.append(n),t.append(e),t},Kanboard.Gantt.prototype.renderSlider=function(t,e){var n=jQuery("
    ",{class:"ganttview-slide-container"}),o=this.getDates(t,e);return n.append(this.renderHorizontalHeader(o)),n.append(this.renderGrid(o)),n.append(this.addBlockContainers()),this.addBlocks(n,t),n},Kanboard.Gantt.prototype.renderHorizontalHeader=function(t){var e=jQuery("
    ",{class:"ganttview-hzheader"}),n=jQuery("
    ",{class:"ganttview-hzheader-months"}),o=jQuery("
    ",{class:"ganttview-hzheader-days"}),a=0;for(var i in t)for(var r in t[i]){var d=t[i][r].length*this.options.cellWidth;a+=d,n.append(jQuery("
    ",{class:"ganttview-hzheader-month",css:{width:d-1+"px"}}).append($.datepicker.regional[$("body").data("js-lang")].monthNames[r]+" "+i));for(var s in t[i][r])o.append(jQuery("
    ",{class:"ganttview-hzheader-day"}).append(t[i][r][s].getDate()))}return n.css("width",a+"px"),o.css("width",a+"px"),e.append(n).append(o),e},Kanboard.Gantt.prototype.renderGrid=function(t){var e=jQuery("
    ",{class:"ganttview-grid"}),n=jQuery("
    ",{class:"ganttview-grid-row"});for(var o in t)for(var a in t[o])for(var i in t[o][a]){var r=jQuery("
    ",{class:"ganttview-grid-row-cell"});this.options.showWeekends&&this.isWeekend(t[o][a][i])&&r.addClass("ganttview-weekend"),n.append(r)}var d=jQuery("div.ganttview-grid-row-cell",n).length*this.options.cellWidth;n.css("width",d+"px"),e.css("width",d+"px");for(var s=0;s",{class:"ganttview-blocks"}),e=0;e",{class:"ganttview-block-container"}));return t},Kanboard.Gantt.prototype.addBlocks=function(t,e){for(var n=jQuery("div.ganttview-blocks div.ganttview-block-container",t),o=0,a=0;a",{class:"ganttview-block-text"}),l=jQuery("
    ",{class:"ganttview-block tooltip"+(this.options.allowMoves?" ganttview-block-movable":""),title:this.getBarTooltip(i),css:{width:r*this.options.cellWidth-9+"px","margin-left":d*this.options.cellWidth+"px"}}).append(s);r>=2&&s.append(i.progress),l.data("record",i),this.setBarColor(l,i),jQuery(n[o]).append(l),o+=1}},Kanboard.Gantt.prototype.getVerticalHeaderTooltip=function(t){var e="";if("task"==t.type)e=jQuery("").append(jQuery("").text(t.column_title)).append(document.createTextNode(" ("+t.progress+")")).append(jQuery("
    ")).append(document.createTextNode(t.title)).prop("outerHTML");else{var n=["project-manager","project-member"];for(var o in n){var a=n[o];if(!jQuery.isEmptyObject(t.users[a])){var i=jQuery("