diff --git a/.gitignore b/.gitignore index b258880..f863853 100644 --- a/.gitignore +++ b/.gitignore @@ -180,3 +180,6 @@ cython_debug/ # Local my2dos API token .my2dos_api_key + +# Local my2dos project API config +.my2dos diff --git a/core/forms.py b/core/forms.py index f352a76..11c4329 100644 --- a/core/forms.py +++ b/core/forms.py @@ -57,10 +57,9 @@ class UserSettingsForm(forms.ModelForm): class UserPreferenceForm(forms.ModelForm): class Meta: model = UserPreference - fields = ['language', 'default_item_kind', 'show_notes', 'show_open_todos', 'show_done_todos', 'show_links', 'due_first', 'overview_lines'] + fields = ['language', 'show_notes', 'show_open_todos', 'show_done_todos', 'show_links', 'due_first', 'overview_lines'] labels = { 'language': _('Language'), - 'default_item_kind': _('Default type for new entries'), 'show_notes': _('Show notes'), 'show_open_todos': _('Show open tasks'), 'show_done_todos': _('Show completed tasks'), @@ -70,7 +69,6 @@ class UserPreferenceForm(forms.ModelForm): } widgets = { 'language': forms.Select(attrs={'class': 'form-select'}), - 'default_item_kind': forms.Select(attrs={'class': 'form-select'}), 'overview_lines': forms.NumberInput(attrs={'class': 'form-control', 'min': 1, 'max': 50}), } diff --git a/core/templates/core/_format_toolbar.html b/core/templates/core/_format_toolbar.html index c27b63d..8d487a3 100644 --- a/core/templates/core/_format_toolbar.html +++ b/core/templates/core/_format_toolbar.html @@ -13,4 +13,12 @@ {% trans 'Select text, then format it' %} + {% if item_kind_choices %} + + {% endif %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 3acf5ea..4f3e2cb 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -109,7 +109,7 @@
-
+ {% csrf_token %}
{% trans "Inline editor is open; quick entry is disabled." %}
@@ -119,7 +119,7 @@ -
{% trans "Add tags" %}
{% for tag in tags %}{% endfor %}
+
{% trans "Add tags" %}
{% for tag in composer_tags %}{% endfor %}
{{ form.content }}
@@ -135,7 +135,13 @@
- {% for item in items %}{% include 'core/_item.html' %}{% empty %}
{% trans "Nothing here yet." %}
{% endfor %} + {% if active_status == 'due' %} + {% for item in due_now_items %}{% include 'core/_item.html' %}{% empty %}
{% trans "No due tasks." %}
{% endfor %} + {% if upcoming_due_items %}
{% trans "Due in the next 7 days" %}
{% endif %} + {% for item in upcoming_due_items %}{% include 'core/_item.html' %}{% endfor %} + {% else %} + {% for item in items %}{% include 'core/_item.html' %}{% empty %}
{% trans "Nothing here yet." %}
{% endfor %} + {% endif %}
diff --git a/core/templates/core/settings.html b/core/templates/core/settings.html index 50660ec..d09094c 100644 --- a/core/templates/core/settings.html +++ b/core/templates/core/settings.html @@ -35,7 +35,7 @@ {% csrf_token %}
{% for field in preference_form %} - {% if field.name == 'language' or field.name == 'default_item_kind' or field.name == 'overview_lines' %} + {% if field.name == 'language' or field.name == 'overview_lines' %}
{{ field }}
{% endif %} {% endfor %} diff --git a/core/tests.py b/core/tests.py index dff5391..da94510 100644 --- a/core/tests.py +++ b/core/tests.py @@ -1,11 +1,13 @@ import shutil import tempfile +from datetime import datetime, time, timedelta from unittest.mock import patch from django.contrib.auth import get_user_model from django.core.files.uploadedfile import SimpleUploadedFile from django.test import TestCase, override_settings from django.urls import reverse +from django.utils import timezone from .models import ApiKey, Attachment, Collection, CollectionSection, Item, Tag, Team, TeamMembership, UserPreference from .templatetags.markdown_extras import markdown, markdown_title @@ -49,6 +51,11 @@ class DefaultItemKindTests(TestCase): self.assertRedirects(response, reverse('index')) self.assertEqual(Item.objects.get().kind, Item.Kind.TODO) + def test_quick_create_can_override_default_from_composer(self): + response = self.client.post(reverse('index'), {'content': 'Composer note', 'default_item_kind': Item.Kind.NOTE}) + self.assertRedirects(response, reverse('index')) + self.assertEqual(Item.objects.get().kind, Item.Kind.NOTE) + def test_explicit_command_overrides_default(self): kind, _, content, _ = parse_quick_content('/note Explicit note', Item.Kind.TODO) self.assertEqual(kind, Item.Kind.NOTE) @@ -203,7 +210,8 @@ class NavigationAndLayoutTests(TestCase): def test_preference_selects_are_stacked(self): response = self.client.get(reverse('settings')) preferences = response.content.decode().split('id="preferences"', 1)[1].split('name="due_first"', 1)[0] - self.assertEqual(preferences.count('