Add Themes: Dark, light and automatic mode

This commit is contained in:
Frédéric Guillot 2023-05-12 21:09:30 -07:00 committed by Frédéric Guillot
parent 65a5f0f47d
commit aade89c9ba
89 changed files with 1129 additions and 196 deletions

View File

@ -30,7 +30,6 @@ class CssCommand extends BaseCommand
const CSS_DIST_PATH = 'assets/css/'; const CSS_DIST_PATH = 'assets/css/';
private $appFiles = [ private $appFiles = [
'variables.css',
'base.css', 'base.css',
'links.css', 'links.css',
'titles.css', 'titles.css',
@ -105,7 +104,9 @@ class CssCommand extends BaseCommand
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
$this->minifyFiles(self::CSS_SRC_PATH, $this->appFiles, 'app.min.css'); $this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'light.css'], $this->appFiles), 'light.min.css');
$this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'dark.css'], $this->appFiles), 'dark.min.css');
$this->minifyFiles(self::CSS_SRC_PATH, array_merge(['themes'.DIRECTORY_SEPARATOR.'auto.css'], $this->appFiles), 'auto.min.css');
$this->minifyFiles(self::CSS_SRC_PATH, $this->printFiles, 'print.min.css'); $this->minifyFiles(self::CSS_SRC_PATH, $this->printFiles, 'print.min.css');
$vendorBundle = concat_files($this->vendorFiles); $vendorBundle = concat_files($this->vendorFiles);

View File

@ -23,6 +23,7 @@ class UserCreationController extends BaseController
public function show(array $values = array(), array $errors = array()) public function show(array $values = array(), array $errors = array())
{ {
$this->response->html($this->template->render('user_creation/show', array( $this->response->html($this->template->render('user_creation/show', array(
'themes' => $this->themeModel->getThemes(),
'timezones' => $this->timezoneModel->getTimezones(true), 'timezones' => $this->timezoneModel->getTimezones(true),
'languages' => $this->languageModel->getLanguages(true), 'languages' => $this->languageModel->getLanguages(true),
'roles' => $this->role->getApplicationRoles(), 'roles' => $this->role->getApplicationRoles(),

View File

@ -46,6 +46,7 @@ class UserInviteController extends BaseController
'token' => $invite['token'], 'token' => $invite['token'],
'errors' => $errors, 'errors' => $errors,
'values' => $values + array('email' => $invite['email']), 'values' => $values + array('email' => $invite['email']),
'themes' => $this->themeModel->getThemes(),
'timezones' => $this->timezoneModel->getTimezones(true), 'timezones' => $this->timezoneModel->getTimezones(true),
'languages' => $this->languageModel->getLanguages(true), 'languages' => $this->languageModel->getLanguages(true),
))); )));

View File

@ -32,6 +32,7 @@ class UserModificationController extends BaseController
'values' => $values, 'values' => $values,
'errors' => $errors, 'errors' => $errors,
'user' => $user, 'user' => $user,
'themes' => $this->themeModel->getThemes(),
'timezones' => $this->timezoneModel->getTimezones(true), 'timezones' => $this->timezoneModel->getTimezones(true),
'languages' => $this->languageModel->getLanguages(true), 'languages' => $this->languageModel->getLanguages(true),
'roles' => $this->role->getApplicationRoles(), 'roles' => $this->role->getApplicationRoles(),
@ -52,6 +53,7 @@ class UserModificationController extends BaseController
'username' => isset($values['username']) ? $values['username'] : '', 'username' => isset($values['username']) ? $values['username'] : '',
'name' => isset($values['name']) ? $values['name'] : '', 'name' => isset($values['name']) ? $values['name'] : '',
'email' => isset($values['email']) ? $values['email'] : '', 'email' => isset($values['email']) ? $values['email'] : '',
'theme' => isset($values['theme']) ? $values['theme'] : '',
'timezone' => isset($values['timezone']) ? $values['timezone'] : '', 'timezone' => isset($values['timezone']) ? $values['timezone'] : '',
'language' => isset($values['language']) ? $values['language'] : '', 'language' => isset($values['language']) ? $values['language'] : '',
'filter' => isset($values['filter']) ? $values['filter'] : '', 'filter' => isset($values['filter']) ? $values['filter'] : '',

View File

@ -43,6 +43,7 @@ class UserViewController extends BaseController
$user = $this->getUser(); $user = $this->getUser();
$this->response->html($this->helper->layout->user('user_view/show', array( $this->response->html($this->helper->layout->user('user_view/show', array(
'user' => $user, 'user' => $user,
'themes' => $this->themeModel->getThemes(),
'timezones' => $this->timezoneModel->getTimezones(true), 'timezones' => $this->timezoneModel->getTimezones(true),
'languages' => $this->languageModel->getLanguages(true), 'languages' => $this->languageModel->getLanguages(true),
))); )));

View File

@ -147,6 +147,7 @@ use Pimple\Container;
* @property \Kanboard\Model\TaskStatusModel $taskStatusModel * @property \Kanboard\Model\TaskStatusModel $taskStatusModel
* @property \Kanboard\Model\TaskTagModel $taskTagModel * @property \Kanboard\Model\TaskTagModel $taskTagModel
* @property \Kanboard\Model\TaskMetadataModel $taskMetadataModel * @property \Kanboard\Model\TaskMetadataModel $taskMetadataModel
* @property \Kanboard\Model\ThemeModel $themeModel
* @property \Kanboard\Model\TimezoneModel $timezoneModel * @property \Kanboard\Model\TimezoneModel $timezoneModel
* @property \Kanboard\Model\TransitionModel $transitionModel * @property \Kanboard\Model\TransitionModel $transitionModel
* @property \Kanboard\Model\UserModel $userModel * @property \Kanboard\Model\UserModel $userModel

View File

@ -195,6 +195,21 @@ class UserSession extends Base
return session_get('user')['timezone']; return session_get('user')['timezone'];
} }
/**
* Get user theme
*
* @access public
* @return string
*/
public function getTheme()
{
if (! $this->isLogged()) {
return 'light';
}
return session_get('user')['theme'];
}
/** /**
* Return true if subtask list toggle is active * Return true if subtask list toggle is active
* *

View File

@ -12,6 +12,11 @@ use Kanboard\Core\Base;
*/ */
class UserHelper extends Base class UserHelper extends Base
{ {
public function getTheme()
{
return $this->userSession->getTheme();
}
/** /**
* Return subtask list toggle value * Return subtask list toggle value
* *

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Změnit pořadí tohoto sloupce podle zadavatele (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Změnit pořadí tohoto sloupce podle zadavatele (Z-A)',
'Reorder this column by due date (ASC)' => 'Změnit pořadí tohoto sloupce podle data vypršení platnosti (vzestupně)', 'Reorder this column by due date (ASC)' => 'Změnit pořadí tohoto sloupce podle data vypršení platnosti (vzestupně)',
'Reorder this column by due date (DESC)' => 'Změnit pořadí tohoto sloupce podle data vypršení platnosti (sestupně)', 'Reorder this column by due date (DESC)' => 'Změnit pořadí tohoto sloupce podle data vypršení platnosti (sestupně)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s přesunul úkol #%d "%s" do projektu "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s přesunul úkol #%d "%s" do projektu "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Úkol #%d "%s" byl přesunut do projektu "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Úkol #%d "%s" byl přesunut do projektu "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Pokud je datum vypršení platnosti menší než určitý počet dní, přesuňte úlohu do jiného sloupce', 'Move the task to another column when the due date is less than a certain number of days' => 'Pokud je datum vypršení platnosti menší než určitý počet dní, přesuňte úlohu do jiného sloupce',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Sorter kolonne efter ansvarlig (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Sorter kolonne efter ansvarlig (Z-A)',
'Reorder this column by due date (ASC)' => 'Sorter kolonne efter udløbstid (ASC)', 'Reorder this column by due date (ASC)' => 'Sorter kolonne efter udløbstid (ASC)',
'Reorder this column by due date (DESC)' => 'Sorter kolonne efter udløbstid (DESC)', 'Reorder this column by due date (DESC)' => 'Sorter kolonne efter udløbstid (DESC)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s flyttet opgave #%d "%s" til projekt "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s flyttet opgave #%d "%s" til projekt "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Opgave #%d "%s" er flyttet til projekt "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Opgave #%d "%s" er flyttet til projekt "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Flyt opgave til anden kolonne når afleveringsdato er mindre end et bestemt antal dage', 'Move the task to another column when the due date is less than a certain number of days' => 'Flyt opgave til anden kolonne når afleveringsdato er mindre end et bestemt antal dage',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Spalte nach Zuständigem ordnen (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Spalte nach Zuständigem ordnen (Z-A)',
'Reorder this column by due date (ASC)' => 'Spalte nach Fälligkeitsdatum ordnen (aufsteigend)', 'Reorder this column by due date (ASC)' => 'Spalte nach Fälligkeitsdatum ordnen (aufsteigend)',
'Reorder this column by due date (DESC)' => 'Spalte nach Fälligkeitsdatum ordnen (absteigend)', 'Reorder this column by due date (DESC)' => 'Spalte nach Fälligkeitsdatum ordnen (absteigend)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s hat die Aufgabe #%d "%s" in das Projekt "%s" verschoben', '%s moved the task #%d "%s" to the project "%s"' => '%s hat die Aufgabe #%d "%s" in das Projekt "%s" verschoben',
'Task #%d "%s" has been moved to the project "%s"' => 'Aufgabe #%d "%s" wurde in das Projekt "%s" verschoben', 'Task #%d "%s" has been moved to the project "%s"' => 'Aufgabe #%d "%s" wurde in das Projekt "%s" verschoben',
'Move the task to another column when the due date is less than a certain number of days' => 'Verschieben der Aufgabe in eine andere Spalte, wenn die Fälligkeit kleiner als eine bestimmte Anzahl von Tagen ist', 'Move the task to another column when the due date is less than a certain number of days' => 'Verschieben der Aufgabe in eine andere Spalte, wenn die Fälligkeit kleiner als eine bestimmte Anzahl von Tagen ist',
@ -1434,4 +1436,9 @@ return array(
'Copy' => 'Kopieren', 'Copy' => 'Kopieren',
'Tasks copied successfully.' => 'Die Aufgaben wurden erfolgreich kopiert.', 'Tasks copied successfully.' => 'Die Aufgaben wurden erfolgreich kopiert.',
'Unable to copy tasks.' => 'Die Aufgaben konnten nicht kopiert werden.', 'Unable to copy tasks.' => 'Die Aufgaben konnten nicht kopiert werden.',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Spalte nach Zuständigem ordnen (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Spalte nach Zuständigem ordnen (Z-A)',
'Reorder this column by due date (ASC)' => 'Spalte nach Fälligkeitsdatum ordnen (aufsteigend)', 'Reorder this column by due date (ASC)' => 'Spalte nach Fälligkeitsdatum ordnen (aufsteigend)',
'Reorder this column by due date (DESC)' => 'Spalte nach Fälligkeitsdatum ordnen (absteigend)', 'Reorder this column by due date (DESC)' => 'Spalte nach Fälligkeitsdatum ordnen (absteigend)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s hat die Aufgabe #%d "%s" in das Projekt "%s" verschoben', '%s moved the task #%d "%s" to the project "%s"' => '%s hat die Aufgabe #%d "%s" in das Projekt "%s" verschoben',
'Task #%d "%s" has been moved to the project "%s"' => 'Aufgabe #%d "%s" wurde in das Projekt "%s" verschoben', 'Task #%d "%s" has been moved to the project "%s"' => 'Aufgabe #%d "%s" wurde in das Projekt "%s" verschoben',
'Move the task to another column when the due date is less than a certain number of days' => 'Verschieben der Aufgabe in eine andere Spalte, wenn die Fälligkeit kleiner als eine bestimmte Anzahl von Tagen ist', 'Move the task to another column when the due date is less than a certain number of days' => 'Verschieben der Aufgabe in eine andere Spalte, wenn die Fälligkeit kleiner als eine bestimmte Anzahl von Tagen ist',
@ -1434,4 +1436,9 @@ return array(
'Copy' => 'Kopieren', 'Copy' => 'Kopieren',
'Tasks copied successfully.' => 'Die Aufgaben wurden erfolgreich kopiert.', 'Tasks copied successfully.' => 'Die Aufgaben wurden erfolgreich kopiert.',
'Unable to copy tasks.' => 'Die Aufgaben konnten nicht kopiert werden.', 'Unable to copy tasks.' => 'Die Aufgaben konnten nicht kopiert werden.',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Reordenar esta columna por persona asignada (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Reordenar esta columna por persona asignada (Z-A)',
'Reorder this column by due date (ASC)' => 'Reordenar esta columna por fecha de vencimiento (ASC)', 'Reorder this column by due date (ASC)' => 'Reordenar esta columna por fecha de vencimiento (ASC)',
'Reorder this column by due date (DESC)' => 'Reordenar esta columna por fecha de vencimiento (DESC)', 'Reorder this column by due date (DESC)' => 'Reordenar esta columna por fecha de vencimiento (DESC)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s movió la tarea #%d "%s" al proyecto "%s', '%s moved the task #%d "%s" to the project "%s"' => '%s movió la tarea #%d "%s" al proyecto "%s',
'Task #%d "%s" has been moved to the project "%s"' => 'La tarea #%d "%s" se movió al proyecto "%s', 'Task #%d "%s" has been moved to the project "%s"' => 'La tarea #%d "%s" se movió al proyecto "%s',
'Move the task to another column when the due date is less than a certain number of days' => 'Mueva la tarea a otra columna cuando la fecha de vencimiento sea inferior a un cierto número de días', 'Move the task to another column when the due date is less than a certain number of days' => 'Mueva la tarea a otra columna cuando la fecha de vencimiento sea inferior a un cierto número de días',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Reordenar esta columna por persona asignada (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Reordenar esta columna por persona asignada (Z-A)',
'Reorder this column by due date (ASC)' => 'Reordenar esta columna por fecha de vencimiento (ASC)', 'Reorder this column by due date (ASC)' => 'Reordenar esta columna por fecha de vencimiento (ASC)',
'Reorder this column by due date (DESC)' => 'Reordenar esta columna por fecha de vencimiento (DESC)', 'Reorder this column by due date (DESC)' => 'Reordenar esta columna por fecha de vencimiento (DESC)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s movió la tarea #%d "%s" al proyecto "%s', '%s moved the task #%d "%s" to the project "%s"' => '%s movió la tarea #%d "%s" al proyecto "%s',
'Task #%d "%s" has been moved to the project "%s"' => 'La tarea #%d "%s" se movió al proyecto "%s', 'Task #%d "%s" has been moved to the project "%s"' => 'La tarea #%d "%s" se movió al proyecto "%s',
'Move the task to another column when the due date is less than a certain number of days' => 'Mueva la tarea a otra columna cuando la fecha de vencimiento sea inferior a un cierto número de días', 'Move the task to another column when the due date is less than a certain number of days' => 'Mueva la tarea a otra columna cuando la fecha de vencimiento sea inferior a un cierto número de días',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'مرتب سازی این ستون بر اساس شخص محول شده (حروف الفبا نزولی)', 'Reorder this column by assignee (Z-A)' => 'مرتب سازی این ستون بر اساس شخص محول شده (حروف الفبا نزولی)',
'Reorder this column by due date (ASC)' => 'مرتب سازی این ستون بر اساس تاریخ سررسید (صعودی)', 'Reorder this column by due date (ASC)' => 'مرتب سازی این ستون بر اساس تاریخ سررسید (صعودی)',
'Reorder this column by due date (DESC)' => 'مرتب سازی این ستون بر اساس تاریخ سررسید (نزولی)', 'Reorder this column by due date (DESC)' => 'مرتب سازی این ستون بر اساس تاریخ سررسید (نزولی)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => 'کاربر %s کار #%d "%s" را به پروژه "%s" منتقل کرد.', '%s moved the task #%d "%s" to the project "%s"' => 'کاربر %s کار #%d "%s" را به پروژه "%s" منتقل کرد.',
'Task #%d "%s" has been moved to the project "%s"' => 'کار #%d "%s" به پروژه "%s" منتقل شد.', 'Task #%d "%s" has been moved to the project "%s"' => 'کار #%d "%s" به پروژه "%s" منتقل شد.',
'Move the task to another column when the due date is less than a certain number of days' => 'هنگامی که تاریخ سررسید کمتر از تعداد روز مشخصی شد، کار را به ستونی دیگر منتقل کن', 'Move the task to another column when the due date is less than a certain number of days' => 'هنگامی که تاریخ سررسید کمتر از تعداد روز مشخصی شد، کار را به ستونی دیگر منتقل کن',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Réorganiser cette colonne par assigné (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Réorganiser cette colonne par assigné (Z-A)',
'Reorder this column by due date (ASC)' => 'Réorganiser cette colonne par date d\'échéance (ASC)', 'Reorder this column by due date (ASC)' => 'Réorganiser cette colonne par date d\'échéance (ASC)',
'Reorder this column by due date (DESC)' => 'Réorganiser cette colonne par date d\'échéance (DESC)', 'Reorder this column by due date (DESC)' => 'Réorganiser cette colonne par date d\'échéance (DESC)',
'Reorder this column by id (ASC)' => 'Réorganiser cette colonne par ID (ASC)',
'Reorder this column by id (DESC)' => 'Réorganiser cette colonne par ID (DESC)',
'%s moved the task #%d "%s" to the project "%s"' => '%s a déplacé la tâche #%d « %s » vers le projet « %s »', '%s moved the task #%d "%s" to the project "%s"' => '%s a déplacé la tâche #%d « %s » vers le projet « %s »',
'Task #%d "%s" has been moved to the project "%s"' => 'La tâche #%d « %s » a été déplacée vers le projet « %s »', 'Task #%d "%s" has been moved to the project "%s"' => 'La tâche #%d « %s » a été déplacée vers le projet « %s »',
'Move the task to another column when the due date is less than a certain number of days' => 'Déplacer la tâche dans une autre colonne lorsque la date d\'échéance est inférieure à un certain nombre de jour', 'Move the task to another column when the due date is less than a certain number of days' => 'Déplacer la tâche dans une autre colonne lorsque la date d\'échéance est inférieure à un certain nombre de jour',
@ -1434,4 +1436,9 @@ return array(
'Copy' => 'Copier', 'Copy' => 'Copier',
'Tasks copied successfully.' => 'Tâches copiées avec succès.', 'Tasks copied successfully.' => 'Tâches copiées avec succès.',
'Unable to copy tasks.' => 'Impossible de copier les tâches.', 'Unable to copy tasks.' => 'Impossible de copier les tâches.',
'Theme' => 'Thème',
'Theme:' => 'Thème :',
'Light theme' => 'Thème clair',
'Dark theme' => 'Thème sombre',
'Automatic theme - Sync with system' => 'Thème automatique - Se synchronize avec le système d\'exploitation',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Presloži ovaj stupac po izvršitelju (Ž-A)', 'Reorder this column by assignee (Z-A)' => 'Presloži ovaj stupac po izvršitelju (Ž-A)',
'Reorder this column by due date (ASC)' => 'Presloži ovaj stupac po roku završetka (UZLAZNO)', 'Reorder this column by due date (ASC)' => 'Presloži ovaj stupac po roku završetka (UZLAZNO)',
'Reorder this column by due date (DESC)' => 'Presloži ovaj stupac po roku završetka (SILAZNO)', 'Reorder this column by due date (DESC)' => 'Presloži ovaj stupac po roku završetka (SILAZNO)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s je premjestio/la zadatak #%d "%s" u projekt "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s je premjestio/la zadatak #%d "%s" u projekt "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Zadatak #%d "%s" je premješten u projekt "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Zadatak #%d "%s" je premješten u projekt "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Pomakni zadatak u drugi stupac kada je datum roka završetka kraći od određenog broja dana', 'Move the task to another column when the due date is less than a certain number of days' => 'Pomakni zadatak u drugi stupac kada je datum roka završetka kraći od određenog broja dana',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Oszlop átrendezése felelős szerint (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Oszlop átrendezése felelős szerint (Z-A)',
'Reorder this column by due date (ASC)' => 'Oszlop átrendezése határidő szerint (növekvő)', 'Reorder this column by due date (ASC)' => 'Oszlop átrendezése határidő szerint (növekvő)',
'Reorder this column by due date (DESC)' => 'Oszlop átrendezése határidő szerint (csökkenő)', 'Reorder this column by due date (DESC)' => 'Oszlop átrendezése határidő szerint (csökkenő)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s áthelyezte a(z) #%d. „%s” feladatot ebbe a projektbe: „%s”', '%s moved the task #%d "%s" to the project "%s"' => '%s áthelyezte a(z) #%d. „%s” feladatot ebbe a projektbe: „%s”',
'Task #%d "%s" has been moved to the project "%s"' => 'A(z) #%d. „%s” feladat áthelyezésre került ebbe a projektbe: „%s”', 'Task #%d "%s" has been moved to the project "%s"' => 'A(z) #%d. „%s” feladat áthelyezésre került ebbe a projektbe: „%s”',
'Move the task to another column when the due date is less than a certain number of days' => 'A feladat áthelyezése egy másik oszlopba, ha a határidő kevesebb egy bizonyos számú napnál', 'Move the task to another column when the due date is less than a certain number of days' => 'A feladat áthelyezése egy másik oszlopba, ha a határidő kevesebb egy bizonyos számú napnál',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Susun ulang kolom ini oleh penerima tugas (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Susun ulang kolom ini oleh penerima tugas (Z-A)',
'Reorder this column by due date (ASC)' => 'Susun ulang kolom ini sebelum tanggal jatuh tempo (ASC)', 'Reorder this column by due date (ASC)' => 'Susun ulang kolom ini sebelum tanggal jatuh tempo (ASC)',
'Reorder this column by due date (DESC)' => 'Susun ulang kolom ini berdasarkan tanggal jatuh tempo (DESC)', 'Reorder this column by due date (DESC)' => 'Susun ulang kolom ini berdasarkan tanggal jatuh tempo (DESC)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s memindahkan tugas #%d "%s" ke proyek "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s memindahkan tugas #%d "%s" ke proyek "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Task #%d "%s" telah dipindahkan ke proyek "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Task #%d "%s" telah dipindahkan ke proyek "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Pindahkan tugas ke kolom lain ketika batas waktu kurang dari jumlah hari tertentu', 'Move the task to another column when the due date is less than a certain number of days' => 'Pindahkan tugas ke kolom lain ketika batas waktu kurang dari jumlah hari tertentu',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Ordina questa colonna per assegnatario (DESC)', 'Reorder this column by assignee (Z-A)' => 'Ordina questa colonna per assegnatario (DESC)',
'Reorder this column by due date (ASC)' => 'Riordina questa colonna per dat di scadenza (ASCENDENTE)', 'Reorder this column by due date (ASC)' => 'Riordina questa colonna per dat di scadenza (ASCENDENTE)',
'Reorder this column by due date (DESC)' => 'Riordina questa colonna per dat di scadenza (DISCENDENTE)', 'Reorder this column by due date (DESC)' => 'Riordina questa colonna per dat di scadenza (DISCENDENTE)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s ha spostato il compito #%d "%s" al progetto "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s ha spostato il compito #%d "%s" al progetto "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Il compito #%d "%s"è stato spostato al progetto "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Il compito #%d "%s"è stato spostato al progetto "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Sposta il compito ad un\'altra colonna se la dat di scadenza è più vicina di un certo numero di giorni', 'Move the task to another column when the due date is less than a certain number of days' => 'Sposta il compito ad un\'altra colonna se la dat di scadenza è più vicina di un certo numero di giorni',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => '担当者で並び替える(Z-A)', 'Reorder this column by assignee (Z-A)' => '担当者で並び替える(Z-A)',
'Reorder this column by due date (ASC)' => '期限で並び替える(昇順)', 'Reorder this column by due date (ASC)' => '期限で並び替える(昇順)',
'Reorder this column by due date (DESC)' => '期限で並び替える(降順)', 'Reorder this column by due date (DESC)' => '期限で並び替える(降順)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s がタスク #%d "%s" をプロジェクト "%s" に移動しました', '%s moved the task #%d "%s" to the project "%s"' => '%s がタスク #%d "%s" をプロジェクト "%s" に移動しました',
'Task #%d "%s" has been moved to the project "%s"' => 'タスク#%d "%s" はプロジェクト "%s" へ移動されました ', 'Task #%d "%s" has been moved to the project "%s"' => 'タスク#%d "%s" はプロジェクト "%s" へ移動されました ',
'Move the task to another column when the due date is less than a certain number of days' => '期限までの日数が規定値以下になったら、タスクを別のカラムに移動する', 'Move the task to another column when the due date is less than a certain number of days' => '期限までの日数が規定値以下になったら、タスクを別のカラムに移動する',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Променете го редоследот на оваа колона од извршител (Ш-A)', 'Reorder this column by assignee (Z-A)' => 'Променете го редоследот на оваа колона од извршител (Ш-A)',
'Reorder this column by due date (ASC)' => 'Променете го редоследот на оваа колона според рок за завршување (РАСТЕЧКИ)', 'Reorder this column by due date (ASC)' => 'Променете го редоследот на оваа колона според рок за завршување (РАСТЕЧКИ)',
'Reorder this column by due date (DESC)' => 'Променете го редоследот на оваа колона според рок за завршување (ОПАЃАЧКИ)', 'Reorder this column by due date (DESC)' => 'Променете го редоследот на оваа колона според рок за завршување (ОПАЃАЧКИ)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s ја премести задачата #%d "%s" за да проектира "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s ја премести задачата #%d "%s" за да проектира "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Задачата #%d "%s" е преместена во проектот "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Задачата #%d "%s" е преместена во проектот "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Поместете ја задачата во друга колона кога рок за завршување е пократок од одреден број денови', 'Move the task to another column when the due date is less than a certain number of days' => 'Поместете ја задачата во друга колона кога рок за завршување е пократок од одреден број денови',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Sortuj kolumnę po osobie przydzielonej do zadania (malejąco)', 'Reorder this column by assignee (Z-A)' => 'Sortuj kolumnę po osobie przydzielonej do zadania (malejąco)',
'Reorder this column by due date (ASC)' => 'Sortuj kolumnę po dacie zakończenia (rosnąco)', 'Reorder this column by due date (ASC)' => 'Sortuj kolumnę po dacie zakończenia (rosnąco)',
'Reorder this column by due date (DESC)' => 'Sortuj kolumnę po dacie zakończenia (malejąco)', 'Reorder this column by due date (DESC)' => 'Sortuj kolumnę po dacie zakończenia (malejąco)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s przeniósł zadanie nr %d "%s" do projektu "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s przeniósł zadanie nr %d "%s" do projektu "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Zadanie nr %d "%s" zostało przeniesione do projektu "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Zadanie nr %d "%s" zostało przeniesione do projektu "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Przenieś zadanie do innej kolumny, kiedy data zakończenia jest oddalona o określoną liczbę dni od aktualnej daty', 'Move the task to another column when the due date is less than a certain number of days' => 'Przenieś zadanie do innej kolumny, kiedy data zakończenia jest oddalona o określoną liczbę dni od aktualnej daty',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Reordenar esta coluna por designado (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Reordenar esta coluna por designado (Z-A)',
'Reorder this column by due date (ASC)' => 'Reordenar esta coluna por data fim estimada (crescente)', 'Reorder this column by due date (ASC)' => 'Reordenar esta coluna por data fim estimada (crescente)',
'Reorder this column by due date (DESC)' => 'Reordenar esta coluna por data fim estimada (decrescente)', 'Reorder this column by due date (DESC)' => 'Reordenar esta coluna por data fim estimada (decrescente)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s moveu a tarefa #%d "%s" para o projeto "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s moveu a tarefa #%d "%s" para o projeto "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Tarefa #%d "%s" foi movida para o projeto "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Tarefa #%d "%s" foi movida para o projeto "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Mover a tarefa para outra coluna quando a data fim estimada for menor que uma quantidade de dias', 'Move the task to another column when the due date is less than a certain number of days' => 'Mover a tarefa para outra coluna quando a data fim estimada for menor que uma quantidade de dias',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Reordenar esta coluna por assignado (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Reordenar esta coluna por assignado (Z-A)',
'Reorder this column by due date (ASC)' => 'Reordenar esta coluna por data de vencimento (ASC)', 'Reorder this column by due date (ASC)' => 'Reordenar esta coluna por data de vencimento (ASC)',
'Reorder this column by due date (DESC)' => 'Reordenar esta coluna por data de vencimento (DESC)', 'Reorder this column by due date (DESC)' => 'Reordenar esta coluna por data de vencimento (DESC)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s moveu a tarefa #%d "%s" para o projeto "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s moveu a tarefa #%d "%s" para o projeto "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Tarefa #%d "%s" foi movida para o projeto "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Tarefa #%d "%s" foi movida para o projeto "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Mover a tarefa para outra coluna quando a data de vencimento é menos que um certo numero de dias', 'Move the task to another column when the due date is less than a certain number of days' => 'Mover a tarefa para outra coluna quando a data de vencimento é menos que um certo numero de dias',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1391,8 +1391,6 @@ return array(
'Destination swimlane' => 'Целевая дорожка', 'Destination swimlane' => 'Целевая дорожка',
'Assign a category when the task is moved to a specific swimlane' => 'Присвоить категорию, если задача перемещена в определенную дорожку', 'Assign a category when the task is moved to a specific swimlane' => 'Присвоить категорию, если задача перемещена в определенную дорожку',
'Move the task to another swimlane when the category is changed' => 'Переместить задачу в другую дорожку, если категория изменена', 'Move the task to another swimlane when the category is changed' => 'Переместить задачу в другую дорожку, если категория изменена',
'Reorder this column by id (ASC)' => 'Упорядочить колонку по ID (ASC)',
'Reorder this column by id (DESC)' => 'Упорядочить колонку по ID (DESC)',
'Reorder this column by priority (ASC)' => 'Упорядочить колонку по приоритету (ASC)', 'Reorder this column by priority (ASC)' => 'Упорядочить колонку по приоритету (ASC)',
'Reorder this column by priority (DESC)' => 'Упорядочить колонку по приоритету (DESC)', 'Reorder this column by priority (DESC)' => 'Упорядочить колонку по приоритету (DESC)',
'Reorder this column by assignee and priority (ASC)' => 'Упорядочить колонку по назначенному пользователю и приоритету (ASC)', 'Reorder this column by assignee and priority (ASC)' => 'Упорядочить колонку по назначенному пользователю и приоритету (ASC)',
@ -1401,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Упорядочить колонку по назначенному пользователю (Я-А)', 'Reorder this column by assignee (Z-A)' => 'Упорядочить колонку по назначенному пользователю (Я-А)',
'Reorder this column by due date (ASC)' => 'Упорядочить колонку по дате окончания (ASC)', 'Reorder this column by due date (ASC)' => 'Упорядочить колонку по дате окончания (ASC)',
'Reorder this column by due date (DESC)' => 'Упорядочить колонку по дате окончания (DESC)', 'Reorder this column by due date (DESC)' => 'Упорядочить колонку по дате окончания (DESC)',
'Reorder this column by id (ASC)' => 'Упорядочить колонку по ID (ASC)',
'Reorder this column by id (DESC)' => 'Упорядочить колонку по ID (DESC)',
'%s moved the task #%d "%s" to the project "%s"' => '%s переместил задачу #%d "%s" в проект "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s переместил задачу #%d "%s" в проект "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Задача #%d "%s" перемещена в проект "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Задача #%d "%s" перемещена в проект "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Переместить задачу в другую колонку, если дата окончания меньше заданного количества дней', 'Move the task to another column when the due date is less than a certain number of days' => 'Переместить задачу в другую колонку, если дата окончания меньше заданного количества дней',
@ -1436,4 +1436,9 @@ return array(
'Copy' => 'Копировать', 'Copy' => 'Копировать',
'Tasks copied successfully.' => 'Задачи успешно скопированы.', 'Tasks copied successfully.' => 'Задачи успешно скопированы.',
'Unable to copy tasks.' => 'Не удалось скопировать задачи.', 'Unable to copy tasks.' => 'Не удалось скопировать задачи.',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Zoradiť stĺpec podľa pridelenia (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Zoradiť stĺpec podľa pridelenia (Z-A)',
'Reorder this column by due date (ASC)' => 'Zoradiť stĺpec podľa termínu ukončenia (VZOST)', 'Reorder this column by due date (ASC)' => 'Zoradiť stĺpec podľa termínu ukončenia (VZOST)',
'Reorder this column by due date (DESC)' => 'Zoradiť stĺpec podľa termínu ukončenia (ZOST)', 'Reorder this column by due date (DESC)' => 'Zoradiť stĺpec podľa termínu ukončenia (ZOST)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s presunul/a úlohu č. %d „%s” do projektu „%s”', '%s moved the task #%d "%s" to the project "%s"' => '%s presunul/a úlohu č. %d „%s” do projektu „%s”',
'Task #%d "%s" has been moved to the project "%s"' => 'Úloha č. %d „%s” bola presunutá do projektu „%s”', 'Task #%d "%s" has been moved to the project "%s"' => 'Úloha č. %d „%s” bola presunutá do projektu „%s”',
'Move the task to another column when the due date is less than a certain number of days' => 'Presunúť úlohu do iného stĺpca, keď je do termínu ukončenia menej ako zadaný počet dní', 'Move the task to another column when the due date is less than a certain number of days' => 'Presunúť úlohu do iného stĺpca, keď je do termínu ukončenia menej ako zadaný počet dní',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Promenite redosled ove kolone prema izvršiocu (Ž-A)', 'Reorder this column by assignee (Z-A)' => 'Promenite redosled ove kolone prema izvršiocu (Ž-A)',
'Reorder this column by due date (ASC)' => 'Promenite redosled ove kolone prema roku završetka (UZLAZNO)', 'Reorder this column by due date (ASC)' => 'Promenite redosled ove kolone prema roku završetka (UZLAZNO)',
'Reorder this column by due date (DESC)' => 'Promenite redosled ove kolone prema roku završetka (SILAZNO)', 'Reorder this column by due date (DESC)' => 'Promenite redosled ove kolone prema roku završetka (SILAZNO)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s je pomerio/la zadatak #%d "%s" u projekat "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s je pomerio/la zadatak #%d "%s" u projekat "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Zadatak #%d "%s" je premešten u projekat "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Zadatak #%d "%s" je premešten u projekat "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Pomeri zadatak u neku drugu kolonu kada je datum roka završetka kraći od određenog broja dana', 'Move the task to another column when the due date is less than a certain number of days' => 'Pomeri zadatak u neku drugu kolonu kada je datum roka završetka kraći od određenog broja dana',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Ändra ordning i denna kolumnen enligt tilldelning (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Ändra ordning i denna kolumnen enligt tilldelning (Z-A)',
'Reorder this column by due date (ASC)' => 'Ändra ordning i denna kolumnen enligt förfallodatum (stigande)', 'Reorder this column by due date (ASC)' => 'Ändra ordning i denna kolumnen enligt förfallodatum (stigande)',
'Reorder this column by due date (DESC)' => 'Ändra ordning i denna kolumnen enligt förfallodatum (fallande)', 'Reorder this column by due date (DESC)' => 'Ändra ordning i denna kolumnen enligt förfallodatum (fallande)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s flyttade uppgift #%d "%s" till projektet "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s flyttade uppgift #%d "%s" till projektet "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Uppgift #%d "%s" har flyttats till projektet "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Uppgift #%d "%s" har flyttats till projektet "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Flytta uppgiften till en annan kolumn när förfallodatum är närmare än ett visst antal dagar', 'Move the task to another column when the due date is less than a certain number of days' => 'Flytta uppgiften till en annan kolumn när förfallodatum är närmare än ett visst antal dagar',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Kolonu atanana göre azalan sırala (Z-A)', 'Reorder this column by assignee (Z-A)' => 'Kolonu atanana göre azalan sırala (Z-A)',
'Reorder this column by due date (ASC)' => 'Kolonu hedef tarihe göre artan sırala', 'Reorder this column by due date (ASC)' => 'Kolonu hedef tarihe göre artan sırala',
'Reorder this column by due date (DESC)' => 'Kolonu hedef tarihe göre azalan sırala', 'Reorder this column by due date (DESC)' => 'Kolonu hedef tarihe göre azalan sırala',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s görevi taşıdı #%d "%s" "%s" projesine', '%s moved the task #%d "%s" to the project "%s"' => '%s görevi taşıdı #%d "%s" "%s" projesine',
'Task #%d "%s" has been moved to the project "%s"' => 'Görev #%d "%s" tarafından "%s" projesine taşındı', 'Task #%d "%s" has been moved to the project "%s"' => 'Görev #%d "%s" tarafından "%s" projesine taşındı',
'Move the task to another column when the due date is less than a certain number of days' => 'Hedef tarihe belirli bir gün sayısından az kaldığında görevi başka kolona taşı', 'Move the task to another column when the due date is less than a certain number of days' => 'Hedef tarihe belirli bir gün sayısından az kaldığında görevi başka kolona taşı',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1391,8 +1391,6 @@ return array(
'Destination swimlane' => 'Доріжка призначення', 'Destination swimlane' => 'Доріжка призначення',
'Assign a category when the task is moved to a specific swimlane' => 'Призначити категорію, коли ця задача мереміщена на вказану доріжку', 'Assign a category when the task is moved to a specific swimlane' => 'Призначити категорію, коли ця задача мереміщена на вказану доріжку',
'Move the task to another swimlane when the category is changed' => 'Перемістити цю задачу на іншу доріжку при зміні категорії', 'Move the task to another swimlane when the category is changed' => 'Перемістити цю задачу на іншу доріжку при зміні категорії',
'Reorder this column by id (ASC)' => 'Впорядкувати цю колонку за ID (ASC)',
'Reorder this column by id (DESC)' => 'Впорядкувати цю колонку за ID (DESC)',
'Reorder this column by priority (ASC)' => 'Впорядкувати цю колонку за зростанням пріоритету', 'Reorder this column by priority (ASC)' => 'Впорядкувати цю колонку за зростанням пріоритету',
'Reorder this column by priority (DESC)' => 'Впорядкувати цю колонку за спаданням пріоритету', 'Reorder this column by priority (DESC)' => 'Впорядкувати цю колонку за спаданням пріоритету',
'Reorder this column by assignee and priority (ASC)' => 'Впорядкувати цю колонку за відповідальним та зростанням пріоритету', 'Reorder this column by assignee and priority (ASC)' => 'Впорядкувати цю колонку за відповідальним та зростанням пріоритету',
@ -1401,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => 'Впорядкувати цю колонку за відповідальним (Я-А)', 'Reorder this column by assignee (Z-A)' => 'Впорядкувати цю колонку за відповідальним (Я-А)',
'Reorder this column by due date (ASC)' => 'Впорядкувати цю колонку за зростанням терміну виконання', 'Reorder this column by due date (ASC)' => 'Впорядкувати цю колонку за зростанням терміну виконання',
'Reorder this column by due date (DESC)' => 'Впорядкувати цю колонку за спаданням терміну виконання', 'Reorder this column by due date (DESC)' => 'Впорядкувати цю колонку за спаданням терміну виконання',
'Reorder this column by id (ASC)' => 'Впорядкувати цю колонку за ID (ASC)',
'Reorder this column by id (DESC)' => 'Впорядкувати цю колонку за ID (DESC)',
'%s moved the task #%d "%s" to the project "%s"' => '%s перемістив задачу #%d "%s" до проєкту "%s"', '%s moved the task #%d "%s" to the project "%s"' => '%s перемістив задачу #%d "%s" до проєкту "%s"',
'Task #%d "%s" has been moved to the project "%s"' => 'Задача #%d "%s" переміщено до проєкту "%s"', 'Task #%d "%s" has been moved to the project "%s"' => 'Задача #%d "%s" переміщено до проєкту "%s"',
'Move the task to another column when the due date is less than a certain number of days' => 'Перемістити цю задачу до іншої колонки, коли до терміну виконання залишилося менше вказаного числа днів', 'Move the task to another column when the due date is less than a certain number of days' => 'Перемістити цю задачу до іншої колонки, коли до терміну виконання залишилося менше вказаного числа днів',
@ -1436,4 +1436,9 @@ return array(
'Copy' => 'Копіювати', 'Copy' => 'Копіювати',
'Tasks copied successfully.' => 'Завдання успішно скопійовано.', 'Tasks copied successfully.' => 'Завдання успішно скопійовано.',
'Unable to copy tasks.' => 'Не вдалося скопіювати завдання.', 'Unable to copy tasks.' => 'Не вдалося скопіювати завдання.',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
'Reorder this column by assignee (Z-A)' => '按指派重排(Z-A)', 'Reorder this column by assignee (Z-A)' => '按指派重排(Z-A)',
'Reorder this column by due date (ASC)' => '按逾期时间重排(升序)', 'Reorder this column by due date (ASC)' => '按逾期时间重排(升序)',
'Reorder this column by due date (DESC)' => '按逾期时间重排(降序)', 'Reorder this column by due date (DESC)' => '按逾期时间重排(降序)',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
'%s moved the task #%d "%s" to the project "%s"' => '%s 已将任务 #%d "%s" 移动到项目"%s" ', '%s moved the task #%d "%s" to the project "%s"' => '%s 已将任务 #%d "%s" 移动到项目"%s" ',
'Task #%d "%s" has been moved to the project "%s"' => '任务 #%d "%s" 已被移动到项目 "%s"', 'Task #%d "%s" has been moved to the project "%s"' => '任务 #%d "%s" 已被移动到项目 "%s"',
'Move the task to another column when the due date is less than a certain number of days' => '当任务即将在指定天数内超期时移动到另一栏', 'Move the task to another column when the due date is less than a certain number of days' => '当任务即将在指定天数内超期时移动到另一栏',
@ -1434,4 +1436,9 @@ return array(
'Copy' => '复制', 'Copy' => '复制',
'Tasks copied successfully.' => '任务复制成功。', 'Tasks copied successfully.' => '任务复制成功。',
'Unable to copy tasks.' => '无法复制任务。', 'Unable to copy tasks.' => '无法复制任务。',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

View File

@ -1399,6 +1399,8 @@ return array(
// 'Reorder this column by assignee (Z-A)' => '', // 'Reorder this column by assignee (Z-A)' => '',
// 'Reorder this column by due date (ASC)' => '', // 'Reorder this column by due date (ASC)' => '',
// 'Reorder this column by due date (DESC)' => '', // 'Reorder this column by due date (DESC)' => '',
// 'Reorder this column by id (ASC)' => '',
// 'Reorder this column by id (DESC)' => '',
// '%s moved the task #%d "%s" to the project "%s"' => '', // '%s moved the task #%d "%s" to the project "%s"' => '',
// 'Task #%d "%s" has been moved to the project "%s"' => '', // 'Task #%d "%s" has been moved to the project "%s"' => '',
// 'Move the task to another column when the due date is less than a certain number of days' => '', // 'Move the task to another column when the due date is less than a certain number of days' => '',
@ -1434,4 +1436,9 @@ return array(
// 'Copy' => '', // 'Copy' => '',
// 'Tasks copied successfully.' => '', // 'Tasks copied successfully.' => '',
// 'Unable to copy tasks.' => '', // 'Unable to copy tasks.' => '',
// 'Theme' => '',
// 'Theme:' => '',
// 'Light theme' => '',
// 'Dark theme' => '',
// 'Automatic theme - Sync with system' => '',
); );

29
app/Model/ThemeModel.php Normal file
View File

@ -0,0 +1,29 @@
<?php
namespace Kanboard\Model;
use Kanboard\Core\Base;
/**
* Class Theme
*
* @package Kanboard\Model
* @author Frederic Guillot
*/
class ThemeModel extends Base
{
/**
* Get available theme
*
* @access public
* @return array
*/
public function getThemes()
{
return [
'light' => t('Light theme'),
'dark' => t('Dark theme'),
'auto' => t('Automatic theme - Sync with system'),
];
}
}

View File

@ -8,7 +8,12 @@ use PDO;
use Kanboard\Core\Security\Token; use Kanboard\Core\Security\Token;
use Kanboard\Core\Security\Role; use Kanboard\Core\Security\Role;
const VERSION = 1; const VERSION = 2;
function version_2(PDO $pdo)
{
$pdo->exec("ALTER TABLE dbo.users ADD COLUMN theme nvarchar(50) DEFAULT N'light' NOT NULL");
}
function version_1(PDO $pdo) function version_1(PDO $pdo)
{ {

View File

@ -8,7 +8,12 @@ use PDO;
use Kanboard\Core\Security\Token; use Kanboard\Core\Security\Token;
use Kanboard\Core\Security\Role; use Kanboard\Core\Security\Role;
const VERSION = 137; const VERSION = 138;
function version_138(PDO $pdo)
{
$pdo->exec("ALTER TABLE users ADD COLUMN theme VARCHAR(50) DEFAULT 'light' NOT NULL");
}
function version_137(PDO $pdo) function version_137(PDO $pdo)
{ {

View File

@ -8,7 +8,12 @@ use PDO;
use Kanboard\Core\Security\Token; use Kanboard\Core\Security\Token;
use Kanboard\Core\Security\Role; use Kanboard\Core\Security\Role;
const VERSION = 115; const VERSION = 116;
function version_116(PDO $pdo)
{
$pdo->exec("ALTER TABLE users ADD COLUMN theme TEXT DEFAULT 'light' NOT NULL");
}
function version_115(PDO $pdo) function version_115(PDO $pdo)
{ {

View File

@ -8,9 +8,14 @@ use Kanboard\Core\Security\Token;
use Kanboard\Core\Security\Role; use Kanboard\Core\Security\Role;
use PDO; use PDO;
const VERSION = 126; const VERSION = 127;
function version_127(PDO $pdo)
{
$pdo->exec("ALTER TABLE users ADD COLUMN theme TEXT DEFAULT 'light' NOT NULL");
}
function version_126(PDO $pdo) function version_126(PDO $pdo)
{ {
$pdo->exec('ALTER TABLE subtask_time_tracking RENAME TO subtask_time_tracking_old'); $pdo->exec('ALTER TABLE subtask_time_tracking RENAME TO subtask_time_tracking_old');

View File

@ -90,6 +90,7 @@ class ClassProvider implements ServiceProviderInterface
'TaskStatusModel', 'TaskStatusModel',
'TaskTagModel', 'TaskTagModel',
'TaskMetadataModel', 'TaskMetadataModel',
'ThemeModel',
'TimezoneModel', 'TimezoneModel',
'TransitionModel', 'TransitionModel',
'UserModel', 'UserModel',

View File

@ -14,7 +14,11 @@
<?= $this->asset->colorCss() ?> <?= $this->asset->colorCss() ?>
<?= $this->asset->css('assets/css/vendor.min.css') ?> <?= $this->asset->css('assets/css/vendor.min.css') ?>
<?= $this->asset->css('assets/css/app.min.css') ?> <?php if (! isset($not_editable)): ?>
<?= $this->asset->css('assets/css/'.$this->user->getTheme().'.min.css') ?>
<?php else: ?>
<?= $this->asset->css('assets/css/light.min.css') ?>
<?php endif ?>
<?= $this->asset->css('assets/css/print.min.css', true, 'print') ?> <?= $this->asset->css('assets/css/print.min.css', true, 'print') ?>
<?= $this->asset->customCss() ?> <?= $this->asset->customCss() ?>

View File

@ -19,6 +19,9 @@
<fieldset> <fieldset>
<legend><?= t('Preferences') ?></legend> <legend><?= t('Preferences') ?></legend>
<?= $this->form->label(t('Theme'), 'theme') ?>
<?= $this->form->select('theme', $themes, $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_theme') ? '' : 'disabled')) ?>
<?= $this->form->label(t('Timezone'), 'timezone') ?> <?= $this->form->label(t('Timezone'), 'timezone') ?>
<?= $this->form->select('timezone', $timezones, $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_timezone') ? '' : 'disabled')) ?> <?= $this->form->select('timezone', $timezones, $values, $errors, array($this->user->hasAccess('UserModificationController', 'show/edit_timezone') ? '' : 'disabled')) ?>

View File

@ -32,6 +32,7 @@
<h2><?= t('Preferences') ?></h2> <h2><?= t('Preferences') ?></h2>
</div> </div>
<ul class="panel"> <ul class="panel">
<li><?= t('Theme:') ?> <strong><?= $this->text->in($user['theme'], $themes) ?></strong></li>
<li><?= t('Timezone:') ?> <strong><?= $this->text->in($user['timezone'], $timezones) ?></strong></li> <li><?= t('Timezone:') ?> <strong><?= $this->text->in($user['timezone'], $timezones) ?></strong></li>
<li><?= t('Language:') ?> <strong><?= $this->text->in($user['language'], $languages) ?></strong></li> <li><?= t('Language:') ?> <strong><?= $this->text->in($user['language'], $languages) ?></strong></li>
<li><?= t('Custom Filter:') ?> <strong><?= $this->text->e($user['filter']) ?></strong></li> <li><?= t('Custom Filter:') ?> <strong><?= $this->text->e($user['filter']) ?></strong></li>

View File

@ -28,6 +28,7 @@ class UserValidator extends BaseValidator
new Validators\Unique('username', t('This username is already taken'), $this->db->getConnection(), UserModel::TABLE, 'id'), new Validators\Unique('username', t('This username is already taken'), $this->db->getConnection(), UserModel::TABLE, 'id'),
new Validators\Email('email', t('Email address invalid')), new Validators\Email('email', t('Email address invalid')),
new Validators\Integer('is_ldap_user', t('This value must be an integer')), new Validators\Integer('is_ldap_user', t('This value must be an integer')),
new Validators\MaxLength('theme', t('The maximum length is %d characters', 50), 50),
); );
} }

File diff suppressed because one or more lines are too long

1
assets/css/auto.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
assets/css/dark.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
assets/css/light.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -18,7 +18,7 @@
} }
.activity-content { .activity-content {
margin-left: 55px margin-left: 55px;
} }
.activity-title { .activity-title {
@ -28,7 +28,7 @@
} }
.activity-description { .activity-description {
color: var(--color-medium); color: var(--color-light);
margin-top: 10px margin-top: 10px
} }

View File

@ -14,6 +14,7 @@ body {
} }
body { body {
background-color: var(--body-background-color);
font-size: 100%; font-size: 100%;
padding-bottom: 10px; padding-bottom: 10px;
color: var(--color-primary); color: var(--color-primary);

View File

@ -60,7 +60,7 @@
td.board-column-task-collapsed { td.board-column-task-collapsed {
font-weight: bold; font-weight: bold;
background-color: #fbfbfb background-color: var(--table-header-background-color)
} }
#board th.board-column-header-collapsed { #board th.board-column-header-collapsed {
@ -79,14 +79,7 @@ td.board-column-task-collapsed {
.board-rotation { .board-rotation {
white-space: nowrap; white-space: nowrap;
-webkit-backface-visibility: hidden;
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg); transform: rotate(90deg);
-webkit-transform-origin: 0 100%;
-moz-transform-origin: 0 100%;
-ms-transform-origin: 0 100%;
transform-origin: 0 100% transform-origin: 0 100%
} }
@ -152,8 +145,8 @@ a.board-swimlane-toggle:focus {
} }
.draggable-placeholder { .draggable-placeholder {
border: 2px dashed #000; border: 2px dashed var(--draggable-placeholder-border-color);
background: #fafafa; background: var(--draggable-placeholder-background-color);
height: 70px; height: 70px;
margin-bottom: 10px margin-bottom: 10px
} }

View File

@ -18,7 +18,7 @@
} }
.comment-title { .comment-title {
border-bottom: 1px dotted #eee; border-bottom: 1px dotted var(--comment-title-border-color);
margin-left: 55px margin-left: 55px
} }
@ -44,22 +44,22 @@
} }
.comments .comment-highlighted { .comments .comment-highlighted {
background-color: #fff8dc; background-color: var(--comment-highlighted-background-color);
border: 2px solid #ffeb8e border: 2px solid var(--comment-highlighted-border-color);
} }
.comments .comment-highlighted:hover { .comments .comment-highlighted:hover {
background-color: #fff8dc background-color: var(--comment-highlighted-hover-background-color)
} }
.comments .comment:hover { .comments .comment:hover {
background: #fff8dc background: var(--comment-highlighted-hover-background-color)
} }
.comments .comment:nth-child(even):not(.comment-highlighted) { .comments .comment:nth-child(even):not(.comment-highlighted) {
background: #fbfbfb background: var(--comment-nth-background-color);
} }
.comments .comment:nth-child(even):not(.comment-highlighted):hover { .comments .comment:nth-child(even):not(.comment-highlighted):hover {
background: #fff8dc background: var(--comment-highlighted-hover-background-color)
} }

View File

@ -23,8 +23,8 @@ ul.dropdown-submenu-open {
list-style: none; list-style: none;
margin: 3px 0 0 1px; margin: 3px 0 0 1px;
padding: 6px 0; padding: 6px 0;
background-color: #fff; background-color: var(--dropdown-background-color);
border: 1px solid #b2b2b2; border: 1px solid var(--dropdown-border-color);
border-radius: 3px; border-radius: 3px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15) box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15)
} }
@ -34,7 +34,7 @@ ul.dropdown-submenu-open {
margin: 0; margin: 0;
padding: 8px 10px; padding: 8px 10px;
font-size: 0.9em; font-size: 0.9em;
border-bottom: 1px solid #f8f8f8; border-bottom: 1px solid var(--dropdown-li-border-color);
cursor: pointer cursor: pointer
} }
@ -61,7 +61,7 @@ ul.dropdown-submenu-open {
.dropdown-submenu-open a { .dropdown-submenu-open a {
text-decoration: none; text-decoration: none;
color: #333 color: var(--color-primary)
} }
.dropdown-submenu-open a:focus { .dropdown-submenu-open a:focus {
@ -70,7 +70,7 @@ ul.dropdown-submenu-open {
.dropdown-menu-link-text, .dropdown-menu-link-text,
.dropdown-menu-link-icon { .dropdown-menu-link-icon {
color: #333; color: var(--color-primary);
text-decoration: none text-decoration: none
} }
@ -79,11 +79,11 @@ ul.dropdown-submenu-open {
} }
td a.dropdown-menu strong { td a.dropdown-menu strong {
color: #333 color: var(--color-primary);
} }
td a.dropdown-menu strong i { td a.dropdown-menu strong i {
color: #333 color: var(--color-primary);
} }
td a.dropdown-menu i { td a.dropdown-menu i {

View File

@ -17,6 +17,7 @@ label {
input, textarea { input, textarea {
font-family: sans-serif; font-family: sans-serif;
background-color: var(--input-background-color);
} }
input[type="number"], input[type="number"],
@ -25,7 +26,7 @@ input[type="email"],
input[type="password"], input[type="password"],
input[type="text"]:not(.input-addon-field) { input[type="text"]:not(.input-addon-field) {
color: var(--color-light); color: var(--color-light);
border: 1px solid #ccc; border: 1px solid var(--input-border-color);
width: 300px; width: 300px;
max-width: 95%; max-width: 95%;
font-size: 1em; font-size: 1em;
@ -36,28 +37,12 @@ input[type="text"]:not(.input-addon-field) {
-moz-appearance: none -moz-appearance: none
} }
input[type="number"]::-webkit-input-placeholder, input[type="number"]::placeholder,
input[type="date"]::-webkit-input-placeholder, input[type="date"]::placeholder,
input[type="email"]::-webkit-input-placeholder, input[type="email"]::placeholder,
input[type="password"]::-webkit-input-placeholder, input[type="password"]::placeholder,
input[type="text"]:not(.input-addon-field)::-webkit-input-placeholder { input[type="text"]:not(.input-addon-field)::placeholder {
color: #dedede color: var(--input-placeholder-color)
}
input[type="number"]::-moz-placeholder,
input[type="date"]::-moz-placeholder,
input[type="email"]::-moz-placeholder,
input[type="password"]::-moz-placeholder,
input[type="text"]:not(.input-addon-field)::-moz-placeholder {
color: #dedede
}
input[type="number"]:-ms-input-placeholder,
input[type="date"]:-ms-input-placeholder,
input[type="email"]:-ms-input-placeholder,
input[type="password"]:-ms-input-placeholder,
input[type="text"]:not(.input-addon-field):-ms-input-placeholder {
color: #dedede
} }
input[type="number"]:focus, input[type="number"]:focus,
@ -65,10 +50,10 @@ input[type="date"]:focus,
input[type="email"]:focus, input[type="email"]:focus,
input[type="password"]:focus, input[type="password"]:focus,
input[type="text"]:focus { input[type="text"]:focus {
color: #000; color: var(--input-focus-color);
border-color: rgba(82, 168, 236, 0.8); border-color: var(--input-focus-border-color);
outline: 0; outline: 0;
box-shadow: 0 0 8px rgba(82, 168, 236, 0.6) box-shadow: 0 0 8px var(--input-focus-shadow-color);
} }
input[type="number"] { input[type="number"] {
@ -93,31 +78,23 @@ input[type="text"]:not(.input-addon-field).form-input-small {
} }
textarea:focus { textarea:focus {
color: #000; color: var(--input-focus-color);
border-color: rgba(82, 168, 236, 0.8); border-color: var(--input-focus-border-color);
outline: 0; outline: 0;
box-shadow: 0 0 8px rgba(82, 168, 236, 0.6) box-shadow: 0 0 8px var(--input-focus-shadow-color);
} }
textarea { textarea {
padding: 4px; padding: 4px;
border: 1px solid #ccc; border: 1px solid var(--input-border-color);
width: 400px; width: 400px;
max-width: 99%; max-width: 99%;
height: 200px; height: 200px;
font-size: 1em font-size: 1em
} }
textarea::-webkit-input-placeholder { textarea::placeholder {
color: #dedede color: var(--input-placeholder-color)
}
textarea::-moz-placeholder {
color: #dedede
}
textarea:-ms-input-placeholder {
color: #dedede
} }
select { select {
@ -164,17 +141,17 @@ input[type="text"].form-max-width {
input.form-error, input.form-error,
textarea.form-error { textarea.form-error {
border: 2px solid #b94a48 border: 2px solid var(--form-error-color);
} }
input.form-error:focus, input.form-error:focus,
textarea.form-error:focus { textarea.form-error:focus {
box-shadow: none; box-shadow: none;
border: 2px solid #b94a48 border: 2px solid var(--form-error-color)
} }
.form-errors { .form-errors {
color: #b94a48; color: var(--form-error-color);
list-style-type: none list-style-type: none
} }
@ -184,7 +161,7 @@ ul.form-errors li {
.form-help { .form-help {
font-size: 0.8em; font-size: 0.8em;
color: brown; color: var(--form-help-color);
margin-bottom: 15px margin-bottom: 15px
} }

View File

@ -4,7 +4,7 @@ header {
padding: 5px 10px; padding: 5px 10px;
margin-bottom: 5px; margin-bottom: 5px;
border-bottom: 1px solid #dedede; border-bottom: 1px solid #dedede;
background-color: #fbfbfb background-color: var(--header-background-color);
} }
header .title-container { header .title-container {

View File

@ -20,8 +20,8 @@
} }
.input-addon-item { .input-addon-item {
background-color: rgba(147, 128, 108, 0.1); background-color: var(--input-addon-background-color);
color: #666; color: var(--input-addon-color);
font: inherit; font: inherit;
font-weight: normal font-weight: normal
} }

View File

@ -15,7 +15,7 @@
top: 2%; top: 2%;
left: 50%; left: 50%;
transform: translateX(-50%); transform: translateX(-50%);
background: #fff; background: var(--body-background-color);
overflow: auto; overflow: auto;
border-radius: 5px border-radius: 5px
} }

View File

@ -3,9 +3,9 @@
padding: 8px 35px 8px 10px; padding: 8px 35px 8px 10px;
margin-top: 10px; margin-top: 10px;
margin-bottom: 15px; margin-bottom: 15px;
border: 1px solid #ddd; border: 1px solid var(--panel-border-color);
color: var(--color-primary); color: var(--color-primary);
background-color: #fcfcfc; background-color: var(--panel-background-color);
overflow: auto overflow: auto
} }

View File

@ -4,9 +4,9 @@
z-index: 1000; z-index: 1000;
min-width: 160px; min-width: 160px;
padding: 5px 0; padding: 5px 0;
background: #fff; background: var(--dropdown-background-color);
list-style: none; list-style: none;
border: 1px solid #ccc; border: 1px solid var(--dropdown-border-color);
border-radius: 3px; border-radius: 3px;
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
overflow: scroll overflow: scroll
@ -18,7 +18,7 @@
padding: 3px 10px; padding: 3px 10px;
color: var(--color-medium); color: var(--color-medium);
cursor: pointer; cursor: pointer;
border-bottom: 1px solid #f8f8f8; border-bottom: 1px solid var(--dropdown-li-border-color);
line-height: 1.5em; line-height: 1.5em;
font-weight: 400 font-weight: 400
} }
@ -34,9 +34,9 @@
.select-dropdown-input-container { .select-dropdown-input-container {
position: relative; position: relative;
border: 1px solid #ccc; border: 1px solid var(--input-border-color);
border-radius: 5px; border-radius: 5px;
background-color: #fff; background-color: var(--input-background-color);
max-width: 300px max-width: 300px
} }

View File

@ -60,7 +60,7 @@
.sidebar>ul li { .sidebar>ul li {
list-style-type: none; list-style-type: none;
line-height: 35px; line-height: 35px;
border-bottom: 1px dotted #efefef; border-bottom: 1px dotted var(--sidebar-border-color);
padding-left: 13px padding-left: 13px
} }
@ -76,7 +76,7 @@
.sidebar>ul li.active a { .sidebar>ul li.active a {
color: var(--color-primary); color: var(--color-primary);
font-weight: bold font-weight: 400
} }
.sidebar-icons>ul li { .sidebar-icons>ul li {

View File

@ -25,7 +25,7 @@ table.table-small {
} }
table.table-striped tr:nth-child(odd) { table.table-striped tr:nth-child(odd) {
background: #fefefe background: var(--table-nth-background-color);
} }
@media (max-width: 768px) { @media (max-width: 768px) {
@ -41,8 +41,8 @@ table.table-striped tr:nth-child(odd) {
table th { table th {
text-align: left; text-align: left;
padding: 0.5em 3px; padding: 0.5em 3px;
border: 1px solid #eee; border: 1px solid var(--table-border-color);
background: #fbfbfb background-color: var(--table-header-background-color)
} }
table th a { table th a {
@ -56,7 +56,7 @@ table th a:hover {
} }
table td { table td {
border: 1px solid #eee; border: 1px solid var(--table-border-color);
padding: 0.5em 3px; padding: 0.5em 3px;
vertical-align: top vertical-align: top
} }
@ -65,6 +65,10 @@ table td li {
margin-left: 20px margin-left: 20px
} }
.task-table a {
color: #000;
}
.column-1 { .column-1 {
width: 1% width: 1%
} }

View File

@ -1,6 +1,6 @@
.draggable-row-handle { .draggable-row-handle {
cursor: move; cursor: move;
color: #dedede color: var(--draggable-row-handle-color)
} }
.draggable-row-handle:hover { .draggable-row-handle:hover {
@ -8,8 +8,8 @@
} }
tr.draggable-item-selected { tr.draggable-item-selected {
background: #fff; background: var(--draggable-item-selected-background-color);
border: 2px solid #666; border: 2px solid var(--draggable-item-selected-border-color);
box-shadow: 4px 2px 10px -4px rgba(0, 0, 0, 0.55) box-shadow: 4px 2px 10px -4px rgba(0, 0, 0, 0.55)
} }
@ -28,5 +28,5 @@ tr.draggable-item-selected td:last-child {
.table-stripped tr.draggable-item-hover, .table-stripped tr.draggable-item-hover,
.table-stripped tr.draggable-item-hover { .table-stripped tr.draggable-item-hover {
background: #FEFFF2 background: var(--draggable-item-hover-background-color)
} }

View File

@ -4,8 +4,8 @@
} }
.table-list-header { .table-list-header {
background: #fbfbfb; background: var(--table-list-header-background-color);
border: 1px solid #e5e5e5; border: 1px solid var(--table-list-header-border-color);
border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0;
line-height: 28px; line-height: 28px;
padding-left: 3px; padding-left: 3px;
@ -13,7 +13,7 @@
} }
.table-list-header a { .table-list-header a {
color: #333; color: var(--color-primary);
font-weight: 500; font-weight: 500;
text-decoration: none; text-decoration: none;
margin-right: 10px margin-right: 10px
@ -31,22 +31,22 @@
} }
.table-list-header .table-list-header-menu { .table-list-header .table-list-header-menu {
text-align: right text-align: right;
} }
.table-list-row { .table-list-row {
padding-left: 3px; padding-left: 3px;
padding-right: 3px; padding-right: 3px;
border-bottom: 1px solid #e5e5e5; border-bottom: 1px solid var(--table-list-border-color);
border-right: 1px solid #e5e5e5 border-right: 1px solid var(--table-list-border-color);
} }
.table-list-row.table-border-left { .table-list-row.table-border-left {
border-left: 1px solid #e5e5e5 border-left: 1px solid var(--table-list-border-color);
} }
.table-list-row:nth-child(odd) { .table-list-row:nth-child(odd) {
background: #fefefe background: var(--table-list-nth-background-color)
} }
.table-list-row:last-child { .table-list-row:last-child {
@ -54,9 +54,9 @@
} }
.table-list-row:hover { .table-list-row:hover {
background: #fff8dc; background: var(--table-list-row-background-color);
border-bottom: 1px solid #ffeb8e; border-bottom: 1px solid var(--table-list-row-hover-border-color);
border-right: 1px solid #ffeb8e border-right: 1px solid var(--table-list-row-hover-border-color)
} }
.table-list-row .table-list-title { .table-list-row .table-list-title {
@ -74,7 +74,7 @@
} }
.table-list-row .table-list-title a { .table-list-row .table-list-title a {
color: #333; color: var(--color-primary);
text-decoration: none text-decoration: none
} }
@ -147,11 +147,11 @@
} }
.table-list-row .table-list-icons a:hover { .table-list-row .table-list-icons a:hover {
color: #333 color: var(--color-primary)
} }
.table-list-row .table-list-icons a:hover i { .table-list-row .table-list-icons a:hover i {
color: #333 color: var(--color-primary)
} }
.table-list-category { .table-list-category {

View File

@ -87,7 +87,7 @@
.task-list-icons a, .task-list-icons a,
.task-list-icons span, .task-list-icons span,
.task-list-icons i { .task-list-icons i {
color: #999; color: var(--task-list-icons-color);
opacity: 1.0 opacity: 1.0
} }

View File

@ -32,7 +32,7 @@
} }
.task-summary-column { .task-summary-column {
color: var(--color-primary); color: var(--color-dark);
} }
.task-summary-column span { .task-summary-column span {

View File

@ -0,0 +1,294 @@
:root {
--body-background-color: #FFF;
--header-background-color: #fbfbfb;
--color-primary: #333;
--color-light: #999;
--color-lighter: #dedede;
--color-dark: #000;
--color-medium: #555;
--color-error: #b94a48;
--link-color-primary: #3366CC;
--link-color-focus: #DF5353;
--link-color-hover: #333;
--alert-color-default: #c09853;
--alert-color-success: #468847;
--alert-color-error: #b94a48;
--alert-color-info: #3a87ad;
--alert-color-normal: #333;
--alert-background-color-default: #fcf8e3;
--alert-background-color-success: #dff0d8;
--alert-background-color-error: #f2dede;
--alert-background-color-info: #d9edf7;
--alert-background-color-normal: #f0f0f0;
--alert-border-color-default: #fbeed5;
--alert-border-color-success: #d6e9c6;
--alert-border-color-error: #eed3d7;
--alert-border-color-info: #bce8f1;
--alert-border-color-normal: #ddd;
--button-default-color: #333;
--button-default-background-color: #f5f5f5;
--button-default-border-color: #ddd;
--button-default-color-focus: #000;
--button-default-background-color-focus: #fafafa;
--button-default-border-color-focus: #bbb;
--button-primary-color: #fff;
--button-primary-background-color: #4d90fe;
--button-primary-border-color: #3079ed;
--button-primary-color-focus: #fff;
--button-primary-background-color-focus: #357ae8;
--button-primary-border-color-focus: #3079ed;
--button-danger-color: #fff;
--button-danger-background-color: #d14836;
--button-danger-border-color: #b0281a;
--button-danger-color-focus: #fff;
--button-danger-background-color-focus: #c53727;
--button-danger-border-color-focus: #b0281a;
--button-disabled-color: #ccc;
--button-disabled-background-color: #f7f7f7;
--button-disabled-border-color: #ccc;
--table-header-background-color: #fbfbfb;
--table-nth-background-color: #fefefe;
--table-border-color: #eee;
--avatar-color-letter: #fff;
--activity-title-color: #000;
--activity-title-border-color: #efefef;
--activity-event-background-color: #fafafa;
--activity-event-hover-color: #fff8dc;
--user-mention-color: #000;
--board-task-limit-color: #DF5353;
--table-list-header-border-color: #e5e5e5;
--table-list-header-background-color: #fbfbfb;
--table-list-nth-background-color: #fefefe;
--table-list-border-color: #e5e5e5;
--table-list-row-hover-border-color: #ffeb8e;
--table-list-row-background-color: #fff8dc;
--sidebar-border-color: #efefef;
--dropdown-background-color: #fff;
--dropdown-border-color: #b2b2b2;
--dropdown-li-border-color: #f8f8f8;
--input-addon-background-color: rgba(147, 128, 108, 0.1);
--input-addon-color: #666;
--views-background-color: #fafafa;
--views-border-color: #ddd;
--views-active-color: #000;
--input-focus-color: #000;
--input-focus-border-color: rgba(82, 168, 236, 0.8);
--input-focus-shadow-color: rgba(82, 168, 236, 0.6);
--input-background-color: #fff;
--input-border-color: #ccc;
--input-placeholder-color: #dedede;
--tooltip-background-color: #fff;
--tooltip-border-color: #ddd;
--tooltip-shadow-color: #aaa;
--panel-background-color: #fcfcfc;
--panel-border-color: #ddd;
--draggable-item-selected-background-color: #fff;
--draggable-item-selected-border-color: #666;
--draggable-item-hover-background-color: #FEFFF2;
--draggable-row-handle-color: #dedede;
--draggable-placeholder-background-color: #fafafa;
--draggable-placeholder-border-color: #000;
--task-list-icons-color: #999;
--form-help-color: brown;
--form-error-color: #b94a48;
--comment-title-border-color: #eee;
--comment-nth-background-color: #fbfbfb;
--comment-highlighted-background-color: #fff8dc;
--comment-highlighted-hover-background-color: #fff8dc;
--comment-highlighted-border-color: #ffeb8e;
}
html {
color-scheme: light;
}
@media (prefers-color-scheme: dark) {
:root {
--body-background-color: #222;
--header-background-color: #222;
--color-primary: #a0a0a0;
--color-light: #a0a0a0;
--color-lighter: #efefef;
--color-dark: #000;
--color-medium: #4f4c4c;
--color-error: #b94a48;
--link-color-primary: #aaa;
--link-color-focus: #ddd;
--link-color-hover: #ddd;
--alert-color-default: #efefef;
--alert-color-success: #def6de;
--alert-color-error: #de9393;
--alert-color-info: #3a87ad;
--alert-color-normal: #333;
--alert-background-color-default: #333;
--alert-background-color-success: #304b27;
--alert-background-color-error: #500606;
--alert-background-color-info: #d9edf7;
--alert-background-color-normal: #f0f0f0;
--alert-border-color-default: #444;
--alert-border-color-success: #3c621b;
--alert-border-color-error: #7e0315;
--alert-border-color-info: #bce8f1;
--alert-border-color-normal: #ddd;
--button-default-color: #333;
--button-default-background-color: #f5f5f5;
--button-default-border-color: #ddd;
--button-default-color-focus: #000;
--button-default-background-color-focus: #fafafa;
--button-default-border-color-focus: #bbb;
--button-primary-color: #efefef;
--button-primary-background-color: #333;
--button-primary-border-color: #444;
--button-primary-color-focus: #fff;
--button-primary-background-color-focus: #555;
--button-primary-border-color-focus: #888;
--button-danger-color: #fff;
--button-danger-background-color: #d14836;
--button-danger-border-color: #b0281a;
--button-danger-color-focus: #fff;
--button-danger-background-color-focus: #c53727;
--button-danger-border-color-focus: #b0281a;
--button-disabled-color: #ccc;
--button-disabled-background-color: #f7f7f7;
--button-disabled-border-color: #ccc;
--table-header-background-color: #1a1a1a;
--table-nth-background-color: #2d2c2c;
--table-border-color: rgba(147, 128, 108, 0.25);
--avatar-color-letter: #fff;
--activity-title-color: #e3e2e2;
--activity-title-border-color: #efefef;
--activity-event-background-color: #313131;
--activity-event-hover-color: #000;
--user-mention-color: #fff;
--board-task-limit-color: #DF5353;
--table-list-header-border-color: rgba(147, 128, 108, 0.25);
--table-list-header-background-color: rgb(59, 59, 59);
--table-list-nth-background-color: #2d2c2c;
--table-list-border-color: rgba(147, 128, 108, 0.25);
--table-list-row-hover-border-color: rgba(147, 128, 108, 0.25);
--table-list-row-background-color: #434343;
--sidebar-border-color: rgba(147, 128, 108, 0.25);
--dropdown-background-color: #222;
--dropdown-border-color: #000;
--dropdown-li-border-color: #555;
--input-addon-background-color: #1a1a1a;
--input-addon-color: rgba(147, 128, 108, 0.25);
--views-background-color: #1a1a1a;
--views-border-color: rgba(147, 128, 108, 0.25);
--views-active-color: #949494;
--input-focus-color: #e6edf3;
--input-focus-border-color: rgba(82, 168, 236, 0.8);
--input-focus-shadow-color: rgba(82, 168, 236, 0.6);
--input-background-color: rgb(59, 59, 59);
--input-border-color: #777575;
--input-placeholder-color: #666;
--tooltip-background-color: #333;
--tooltip-border-color: #555;
--tooltip-shadow-color: #111;
--panel-background-color: #2c2c2c;
--panel-border-color: #000;
--draggable-item-selected-background-color: #222;
--draggable-item-selected-border-color: #111;
--draggable-item-hover-background-color: #555;
--draggable-row-handle-color: #444;
--draggable-placeholder-background-color: #444;
--draggable-placeholder-border-color: #666;
--task-list-icons-color: #cccccc;
--form-help-color: #a8a12f;
--form-error-color: #f2332f;
--comment-title-border-color: #eee;
--comment-nth-background-color: #2b2a2a;
--comment-highlighted-background-color: #2b2901;
--comment-highlighted-hover-background-color: #000;
--comment-highlighted-border-color: #c09e05;
}
html {
color-scheme: dark;
}
.select2-dropdown, .select2-close-mask {
background-color: var(--input-background-color);
}
.select2-container--default .select2-selection--multiple,
.select2-container--default .select2-selection--single {
background-color: var(--input-background-color);
border-color: var(--input-border-color);
}
.select2-container--default.select2-container--focus .select2-selection--multiple {
border-color: var(--input-focus-border-color);
}
.select2-container--default .select2-selection--single .select2-selection__rendered,
.select2-container--classic .select2-selection--single .select2-selection__rendered {
color: #fff;
}
.task-board-title {
color: #000;
}
.task-summary-column a, .task-summary-column a:hover {
color: #000;
}
}

View File

@ -0,0 +1,159 @@
:root {
--body-background-color: #222;
--header-background-color: #222;
--color-primary: #a0a0a0;
--color-light: #a0a0a0;
--color-lighter: #efefef;
--color-dark: #000;
--color-medium: #4f4c4c;
--color-error: #b94a48;
--link-color-primary: #aaa;
--link-color-focus: #ddd;
--link-color-hover: #ddd;
--alert-color-default: #efefef;
--alert-color-success: #def6de;
--alert-color-error: #de9393;
--alert-color-info: #3a87ad;
--alert-color-normal: #333;
--alert-background-color-default: #333;
--alert-background-color-success: #304b27;
--alert-background-color-error: #500606;
--alert-background-color-info: #d9edf7;
--alert-background-color-normal: #f0f0f0;
--alert-border-color-default: #444;
--alert-border-color-success: #3c621b;
--alert-border-color-error: #7e0315;
--alert-border-color-info: #bce8f1;
--alert-border-color-normal: #ddd;
--button-default-color: #333;
--button-default-background-color: #f5f5f5;
--button-default-border-color: #ddd;
--button-default-color-focus: #000;
--button-default-background-color-focus: #fafafa;
--button-default-border-color-focus: #bbb;
--button-primary-color: #efefef;
--button-primary-background-color: #333;
--button-primary-border-color: #444;
--button-primary-color-focus: #fff;
--button-primary-background-color-focus: #555;
--button-primary-border-color-focus: #888;
--button-danger-color: #fff;
--button-danger-background-color: #d14836;
--button-danger-border-color: #b0281a;
--button-danger-color-focus: #fff;
--button-danger-background-color-focus: #c53727;
--button-danger-border-color-focus: #b0281a;
--button-disabled-color: #ccc;
--button-disabled-background-color: #f7f7f7;
--button-disabled-border-color: #ccc;
--table-header-background-color: #1a1a1a;
--table-nth-background-color: #2d2c2c;
--table-border-color: rgba(147, 128, 108, 0.25);
--avatar-color-letter: #fff;
--activity-title-color: #e3e2e2;
--activity-title-border-color: #efefef;
--activity-event-background-color: #313131;
--activity-event-hover-color: #000;
--user-mention-color: #fff;
--board-task-limit-color: #DF5353;
--table-list-header-border-color: rgba(147, 128, 108, 0.25);
--table-list-header-background-color: rgb(59, 59, 59);
--table-list-nth-background-color: #2d2c2c;
--table-list-border-color: rgba(147, 128, 108, 0.25);
--table-list-row-hover-border-color: rgba(147, 128, 108, 0.25);
--table-list-row-background-color: #434343;
--sidebar-border-color: rgba(147, 128, 108, 0.25);
--dropdown-background-color: #222;
--dropdown-border-color: #000;
--dropdown-li-border-color: #555;
--input-addon-background-color: #1a1a1a;
--input-addon-color: rgba(147, 128, 108, 0.25);
--views-background-color: #1a1a1a;
--views-border-color: rgba(147, 128, 108, 0.25);
--views-active-color: #949494;
--input-focus-color: #e6edf3;
--input-focus-border-color: rgba(82, 168, 236, 0.8);
--input-focus-shadow-color: rgba(82, 168, 236, 0.6);
--input-background-color: rgb(59, 59, 59);
--input-border-color: #777575;
--input-placeholder-color: #666;
--tooltip-background-color: #333;
--tooltip-border-color: #555;
--tooltip-shadow-color: #111;
--panel-background-color: #2c2c2c;
--panel-border-color: #000;
--draggable-item-selected-background-color: #222;
--draggable-item-selected-border-color: #111;
--draggable-item-hover-background-color: #555;
--draggable-row-handle-color: #444;
--draggable-placeholder-background-color: #444;
--draggable-placeholder-border-color: #666;
--task-list-icons-color: #cccccc;
--form-help-color: #a8a12f;
--form-error-color: #f2332f;
--comment-title-border-color: #eee;
--comment-nth-background-color: #2b2a2a;
--comment-highlighted-background-color: #2b2901;
--comment-highlighted-hover-background-color: #000;
--comment-highlighted-border-color: #c09e05;
}
html {
color-scheme: dark;
}
.select2-dropdown, .select2-close-mask {
background-color: var(--input-background-color);
}
.select2-container--default .select2-selection--multiple,
.select2-container--default .select2-selection--single {
background-color: var(--input-background-color);
border-color: var(--input-border-color);
}
.select2-container--default.select2-container--focus .select2-selection--multiple {
border-color: var(--input-focus-border-color);
}
.select2-container--default .select2-selection--single .select2-selection__rendered,
.select2-container--classic .select2-selection--single .select2-selection__rendered {
color: #fff;
}
.task-board-title {
color: #000;
}
.task-summary-column a, .task-summary-column a:hover {
color: #000;
}

View File

@ -1,4 +1,7 @@
:root { :root {
--body-background-color: #FFF;
--header-background-color: #fbfbfb;
--color-primary: #333; --color-primary: #333;
--color-light: #999; --color-light: #999;
--color-lighter: #dedede; --color-lighter: #dedede;
@ -56,6 +59,10 @@
--button-disabled-background-color: #f7f7f7; --button-disabled-background-color: #f7f7f7;
--button-disabled-border-color: #ccc; --button-disabled-border-color: #ccc;
--table-header-background-color: #fbfbfb;
--table-nth-background-color: #fefefe;
--table-border-color: #eee;
--avatar-color-letter: #fff; --avatar-color-letter: #fff;
--activity-title-color: #000; --activity-title-color: #000;
@ -66,4 +73,61 @@
--user-mention-color: #000; --user-mention-color: #000;
--board-task-limit-color: #DF5353; --board-task-limit-color: #DF5353;
--table-list-header-border-color: #e5e5e5;
--table-list-header-background-color: #fbfbfb;
--table-list-nth-background-color: #fefefe;
--table-list-border-color: #e5e5e5;
--table-list-row-hover-border-color: #ffeb8e;
--table-list-row-background-color: #fff8dc;
--sidebar-border-color: #efefef;
--dropdown-background-color: #fff;
--dropdown-border-color: #b2b2b2;
--dropdown-li-border-color: #f8f8f8;
--input-addon-background-color: rgba(147, 128, 108, 0.1);
--input-addon-color: #666;
--views-background-color: #fafafa;
--views-border-color: #ddd;
--views-active-color: #000;
--input-focus-color: #000;
--input-focus-border-color: rgba(82, 168, 236, 0.8);
--input-focus-shadow-color: rgba(82, 168, 236, 0.6);
--input-background-color: #fff;
--input-border-color: #ccc;
--input-placeholder-color: #dedede;
--tooltip-background-color: #fff;
--tooltip-border-color: #ddd;
--tooltip-shadow-color: #aaa;
--panel-background-color: #fcfcfc;
--panel-border-color: #ddd;
--draggable-item-selected-background-color: #fff;
--draggable-item-selected-border-color: #666;
--draggable-item-hover-background-color: #FEFFF2;
--draggable-row-handle-color: #dedede;
--draggable-placeholder-background-color: #fafafa;
--draggable-placeholder-border-color: #000;
--task-list-icons-color: #999;
--form-help-color: brown;
--form-error-color: #b94a48;
--comment-title-border-color: #eee;
--comment-nth-background-color: #fbfbfb;
--comment-highlighted-background-color: #fff8dc;
--comment-highlighted-hover-background-color: #fff8dc;
--comment-highlighted-border-color: #ffeb8e;
} }
html {
color-scheme: light;
}

View File

@ -8,10 +8,10 @@
#tooltip-container { #tooltip-container {
padding: 5px; padding: 5px;
background: #fff; background: var(--tooltip-background-color);
border: 1px solid #ddd; border: 1px solid var(--tooltip-border-color);
border-radius: 4px; border-radius: 4px;
box-shadow: 0 6px 12px #aaa; box-shadow: 0 6px 12px var(--tooltip-shadow-color);
position: absolute; position: absolute;
min-width: 350px min-width: 350px
} }

View File

@ -25,8 +25,8 @@
.views li { .views li {
white-space: nowrap; white-space: nowrap;
background: #fafafa; background: var(--views-background-color);
border: 1px solid #ddd; border: 1px solid var(--views-border-color);
border-right: none; border-right: none;
padding: 4px 8px; padding: 4px 8px;
display: inline display: inline
@ -37,13 +37,13 @@
display: block; display: block;
margin-top: 5px; margin-top: 5px;
border-radius: 5px; border-radius: 5px;
border: 1px solid #ddd border: 1px solid var(--views-border-color)
} }
} }
.views li.active a { .views li.active a {
font-weight: bold; font-weight: bold;
color: #000; color: var(--views-active-color);
text-decoration: none text-decoration: none
} }
@ -53,13 +53,13 @@
} }
.views li:last-child { .views li:last-child {
border-right: 1px solid #ddd; border-right: 1px solid var(--views-border-color);
border-top-right-radius: 5px; border-top-right-radius: 5px;
border-bottom-right-radius: 5px border-bottom-right-radius: 5px
} }
.views a { .views a {
color: var(--color-medium); color: var(--color-ligth);
text-decoration: none text-decoration: none
} }

18
vendor/autoload.php vendored
View File

@ -2,6 +2,24 @@
// autoload.php @generated by Composer // autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, $err);
} elseif (!headers_sent()) {
echo $err;
}
}
trigger_error(
$err,
E_USER_ERROR
);
}
require_once __DIR__ . '/composer/autoload_real.php'; require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851::getLoader(); return ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851::getLoader();

View File

@ -42,30 +42,79 @@ namespace Composer\Autoload;
*/ */
class ClassLoader class ClassLoader
{ {
/** @var \Closure(string):void */
private static $includeFile;
/** @var ?string */
private $vendorDir; private $vendorDir;
// PSR-4 // PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array(); private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array(); private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array(); private $fallbackDirsPsr4 = array();
// PSR-0 // PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array(); private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array(); private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false; private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array(); private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false; private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array(); private $missingClasses = array();
/** @var ?string */
private $apcuPrefix; private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array(); private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null) public function __construct($vendorDir = null)
{ {
$this->vendorDir = $vendorDir; $this->vendorDir = $vendorDir;
self::initializeIncludeClosure();
} }
/**
* @return string[]
*/
public function getPrefixes() public function getPrefixes()
{ {
if (!empty($this->prefixesPsr0)) { if (!empty($this->prefixesPsr0)) {
@ -75,28 +124,47 @@ class ClassLoader
return array(); return array();
} }
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4() public function getPrefixesPsr4()
{ {
return $this->prefixDirsPsr4; return $this->prefixDirsPsr4;
} }
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs() public function getFallbackDirs()
{ {
return $this->fallbackDirsPsr0; return $this->fallbackDirsPsr0;
} }
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4() public function getFallbackDirsPsr4()
{ {
return $this->fallbackDirsPsr4; return $this->fallbackDirsPsr4;
} }
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap() public function getClassMap()
{ {
return $this->classMap; return $this->classMap;
} }
/** /**
* @param array $classMap Class to filename map * @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/ */
public function addClassMap(array $classMap) public function addClassMap(array $classMap)
{ {
@ -112,8 +180,10 @@ class ClassLoader
* appending or prepending to the ones previously set for this prefix. * appending or prepending to the ones previously set for this prefix.
* *
* @param string $prefix The prefix * @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories * @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories * @param bool $prepend Whether to prepend the directories
*
* @return void
*/ */
public function add($prefix, $paths, $prepend = false) public function add($prefix, $paths, $prepend = false)
{ {
@ -157,10 +227,12 @@ class ClassLoader
* appending or prepending to the ones previously set for this namespace. * appending or prepending to the ones previously set for this namespace.
* *
* @param string $prefix The prefix/namespace, with trailing '\\' * @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories * @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories * @param bool $prepend Whether to prepend the directories
* *
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
*
* @return void
*/ */
public function addPsr4($prefix, $paths, $prepend = false) public function addPsr4($prefix, $paths, $prepend = false)
{ {
@ -205,7 +277,9 @@ class ClassLoader
* replacing any others previously set for this prefix. * replacing any others previously set for this prefix.
* *
* @param string $prefix The prefix * @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories * @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/ */
public function set($prefix, $paths) public function set($prefix, $paths)
{ {
@ -221,9 +295,11 @@ class ClassLoader
* replacing any others previously set for this namespace. * replacing any others previously set for this namespace.
* *
* @param string $prefix The prefix/namespace, with trailing '\\' * @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories * @param string[]|string $paths The PSR-4 base directories
* *
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
*
* @return void
*/ */
public function setPsr4($prefix, $paths) public function setPsr4($prefix, $paths)
{ {
@ -243,6 +319,8 @@ class ClassLoader
* Turns on searching the include path for class files. * Turns on searching the include path for class files.
* *
* @param bool $useIncludePath * @param bool $useIncludePath
*
* @return void
*/ */
public function setUseIncludePath($useIncludePath) public function setUseIncludePath($useIncludePath)
{ {
@ -265,6 +343,8 @@ class ClassLoader
* that have not been registered with the class map. * that have not been registered with the class map.
* *
* @param bool $classMapAuthoritative * @param bool $classMapAuthoritative
*
* @return void
*/ */
public function setClassMapAuthoritative($classMapAuthoritative) public function setClassMapAuthoritative($classMapAuthoritative)
{ {
@ -285,6 +365,8 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled. * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
* *
* @param string|null $apcuPrefix * @param string|null $apcuPrefix
*
* @return void
*/ */
public function setApcuPrefix($apcuPrefix) public function setApcuPrefix($apcuPrefix)
{ {
@ -305,14 +387,18 @@ class ClassLoader
* Registers this instance as an autoloader. * Registers this instance as an autoloader.
* *
* @param bool $prepend Whether to prepend the autoloader or not * @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/ */
public function register($prepend = false) public function register($prepend = false)
{ {
spl_autoload_register(array($this, 'loadClass'), true, $prepend); spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) { if (null === $this->vendorDir) {
//no-op return;
} elseif ($prepend) { }
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else { } else {
unset(self::$registeredLoaders[$this->vendorDir]); unset(self::$registeredLoaders[$this->vendorDir]);
@ -322,6 +408,8 @@ class ClassLoader
/** /**
* Unregisters this instance as an autoloader. * Unregisters this instance as an autoloader.
*
* @return void
*/ */
public function unregister() public function unregister()
{ {
@ -336,15 +424,18 @@ class ClassLoader
* Loads the given class or interface. * Loads the given class or interface.
* *
* @param string $class The name of the class * @param string $class The name of the class
* @return bool|null True if loaded, null otherwise * @return true|null True if loaded, null otherwise
*/ */
public function loadClass($class) public function loadClass($class)
{ {
if ($file = $this->findFile($class)) { if ($file = $this->findFile($class)) {
includeFile($file); $includeFile = self::$includeFile;
$includeFile($file);
return true; return true;
} }
return null;
} }
/** /**
@ -399,6 +490,11 @@ class ClassLoader
return self::$registeredLoaders; return self::$registeredLoaders;
} }
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext) private function findFileWithExtension($class, $ext)
{ {
// PSR-4 lookup // PSR-4 lookup
@ -464,14 +560,26 @@ class ClassLoader
return false; return false;
} }
}
/** /**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include. * Scope isolated include.
* *
* Prevents access to $this/self from included files. * Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/ */
function includeFile($file) self::$includeFile = \Closure::bind(static function($file) {
{
include $file; include $file;
}, null, null);
}
} }

View File

@ -1,3 +1,4 @@
Copyright (c) Nils Adermann, Jordi Boggiano Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
@ -17,3 +18,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.

View File

@ -2,7 +2,7 @@
// autoload_classmap.php @generated by Composer // autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__)); $vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir); $baseDir = dirname($vendorDir);
return array( return array(
@ -612,6 +612,7 @@ return array(
'Kanboard\\Model\\TaskReorderModel' => $baseDir . '/app/Model/TaskReorderModel.php', 'Kanboard\\Model\\TaskReorderModel' => $baseDir . '/app/Model/TaskReorderModel.php',
'Kanboard\\Model\\TaskStatusModel' => $baseDir . '/app/Model/TaskStatusModel.php', 'Kanboard\\Model\\TaskStatusModel' => $baseDir . '/app/Model/TaskStatusModel.php',
'Kanboard\\Model\\TaskTagModel' => $baseDir . '/app/Model/TaskTagModel.php', 'Kanboard\\Model\\TaskTagModel' => $baseDir . '/app/Model/TaskTagModel.php',
'Kanboard\\Model\\ThemeModel' => $baseDir . '/app/Model/ThemeModel.php',
'Kanboard\\Model\\TimezoneModel' => $baseDir . '/app/Model/TimezoneModel.php', 'Kanboard\\Model\\TimezoneModel' => $baseDir . '/app/Model/TimezoneModel.php',
'Kanboard\\Model\\TransitionModel' => $baseDir . '/app/Model/TransitionModel.php', 'Kanboard\\Model\\TransitionModel' => $baseDir . '/app/Model/TransitionModel.php',
'Kanboard\\Model\\UserLockingModel' => $baseDir . '/app/Model/UserLockingModel.php', 'Kanboard\\Model\\UserLockingModel' => $baseDir . '/app/Model/UserLockingModel.php',

View File

@ -2,14 +2,14 @@
// autoload_files.php @generated by Composer // autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__)); $vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir); $baseDir = dirname($vendorDir);
return array( return array(
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'8a67f3044590529ed0a5e02f9cc9c90b' => $baseDir . '/app/functions.php', '8a67f3044590529ed0a5e02f9cc9c90b' => $baseDir . '/app/functions.php',
'dda285bdc738399c7167126cf41c82cb' => $baseDir . '/libs/swiftmailer/swift_required.php', 'dda285bdc738399c7167126cf41c82cb' => $baseDir . '/libs/swiftmailer/swift_required.php',
); );

View File

@ -2,7 +2,7 @@
// autoload_namespaces.php @generated by Composer // autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__)); $vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir); $baseDir = dirname($vendorDir);
return array( return array(

View File

@ -2,7 +2,7 @@
// autoload_psr4.php @generated by Composer // autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__)); $vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir); $baseDir = dirname($vendorDir);
return array( return array(

View File

@ -25,51 +25,26 @@ class ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851
require __DIR__ . '/platform_check.php'; require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851', 'loadClassLoader'), true, true); spl_autoload_register(array('ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851', 'loadClassLoader')); spl_autoload_unregister(array('ComposerAutoloaderInit80f59a55e693f3d5493bcaaa968d1851', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php'; require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851::getInitializer($loader)); call_user_func(\Composer\Autoload\ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->register(true); $loader->register(true);
if ($useStaticLoader) { $filesToLoad = \Composer\Autoload\ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851::$files;
$includeFiles = Composer\Autoload\ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851::$files; $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
} else { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$includeFiles = require __DIR__ . '/autoload_files.php'; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
require $file;
} }
foreach ($includeFiles as $fileIdentifier => $file) { }, null, null);
composerRequire80f59a55e693f3d5493bcaaa968d1851($fileIdentifier, $file); foreach ($filesToLoad as $fileIdentifier => $file) {
$requireFile($fileIdentifier, $file);
} }
return $loader; return $loader;
} }
} }
function composerRequire80f59a55e693f3d5493bcaaa968d1851($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
}
}

View File

@ -8,9 +8,9 @@ class ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851
{ {
public static $files = array ( public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'8a67f3044590529ed0a5e02f9cc9c90b' => __DIR__ . '/../..' . '/app/functions.php', '8a67f3044590529ed0a5e02f9cc9c90b' => __DIR__ . '/../..' . '/app/functions.php',
'dda285bdc738399c7167126cf41c82cb' => __DIR__ . '/../..' . '/libs/swiftmailer/swift_required.php', 'dda285bdc738399c7167126cf41c82cb' => __DIR__ . '/../..' . '/libs/swiftmailer/swift_required.php',
); );
@ -776,6 +776,7 @@ class ComposerStaticInit80f59a55e693f3d5493bcaaa968d1851
'Kanboard\\Model\\TaskReorderModel' => __DIR__ . '/../..' . '/app/Model/TaskReorderModel.php', 'Kanboard\\Model\\TaskReorderModel' => __DIR__ . '/../..' . '/app/Model/TaskReorderModel.php',
'Kanboard\\Model\\TaskStatusModel' => __DIR__ . '/../..' . '/app/Model/TaskStatusModel.php', 'Kanboard\\Model\\TaskStatusModel' => __DIR__ . '/../..' . '/app/Model/TaskStatusModel.php',
'Kanboard\\Model\\TaskTagModel' => __DIR__ . '/../..' . '/app/Model/TaskTagModel.php', 'Kanboard\\Model\\TaskTagModel' => __DIR__ . '/../..' . '/app/Model/TaskTagModel.php',
'Kanboard\\Model\\ThemeModel' => __DIR__ . '/../..' . '/app/Model/ThemeModel.php',
'Kanboard\\Model\\TimezoneModel' => __DIR__ . '/../..' . '/app/Model/TimezoneModel.php', 'Kanboard\\Model\\TimezoneModel' => __DIR__ . '/../..' . '/app/Model/TimezoneModel.php',
'Kanboard\\Model\\TransitionModel' => __DIR__ . '/../..' . '/app/Model/TransitionModel.php', 'Kanboard\\Model\\TransitionModel' => __DIR__ . '/../..' . '/app/Model/TransitionModel.php',
'Kanboard\\Model\\UserLockingModel' => __DIR__ . '/../..' . '/app/Model/UserLockingModel.php', 'Kanboard\\Model\\UserLockingModel' => __DIR__ . '/../..' . '/app/Model/UserLockingModel.php',