Browse Source

Consolidate settings (#515)

* Remove ADA Setting to show skip navigation. Always render skip navigation using the new Bootstrap 5 class which behaves quite nicely.
* To simplify the UI, move small/minimally used settings into `LayoutSettings`:
  * GeneralSettings
  * GoogleApiSettings
  * MailchimpApiSettings
* Rename "Layout" to "CRX Settings" in the Wagtail admin.
Vince Salvino 2 years ago
parent
commit
03e58d755a

+ 2 - 4
coderedcms/api/mailchimp.py

@@ -1,5 +1,5 @@
 from wagtail.models import Site
-from coderedcms.models.wagtailsettings_models import MailchimpApiSettings
+from coderedcms.models.wagtailsettings_models import LayoutSettings
 
 import requests
 
@@ -13,9 +13,7 @@ class MailchimpApi:
 
     def set_access_token(self, site=None):
         site = site or Site.objects.get(is_default_site=True)
-        self.access_token = MailchimpApiSettings.for_site(
-            site
-        ).mailchimp_api_key
+        self.access_token = LayoutSettings.for_site(site).mailchimp_api_key
         if self.access_token:
             self.set_base_url()
             self.is_active = True

+ 16 - 0
coderedcms/migrations/0034_delete_adasettings.py

@@ -0,0 +1,16 @@
+# Generated by Django 4.0.7 on 2022-08-10 17:45
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('coderedcms', '0033_remove_carousel_animation_and_more'),
+    ]
+
+    operations = [
+        migrations.DeleteModel(
+            name='ADASettings',
+        ),
+    ]

+ 85 - 0
coderedcms/migrations/0035_remove_googleapisettings_site_and_more.py

@@ -0,0 +1,85 @@
+# Generated by Django 4.0.7 on 2022-08-10 20:37
+
+from django.db import migrations, models
+
+
+def copy_settings(apps, schema_editor):
+    LayoutSettings = apps.get_model("coderedcms", "LayoutSettings")
+    GeneralSettings = apps.get_model("coderedcms", "GeneralSettings")
+    GoogleApiSettings = apps.get_model("coderedcms", "GoogleApiSettings")
+    MailchimpApiSettings = apps.get_model("coderedcms", "MailchimpApiSettings")
+    for s in LayoutSettings.objects.all():
+        gen = GeneralSettings.objects.get(site=s.site)
+        goog = GoogleApiSettings.objects.get(site=s.site)
+        mc = MailchimpApiSettings.objects.get(site=s.site)
+        s.external_new_tab = gen.external_new_tab
+        s.from_email_address = gen.from_email_address
+        s.search_num_results = gen.search_num_results
+        s.google_maps_api_key = goog.google_maps_api_key
+        s.mailchimp_api_key = mc.mailchimp_api_key
+        s.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('coderedcms', '0034_delete_adasettings'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='layoutsettings',
+            options={'verbose_name': 'CRX Settings'},
+        ),
+        migrations.AddField(
+            model_name='layoutsettings',
+            name='external_new_tab',
+            field=models.BooleanField(default=False, verbose_name='Open all external links in new tab'),
+        ),
+        migrations.AddField(
+            model_name='layoutsettings',
+            name='from_email_address',
+            field=models.CharField(blank=True, help_text='The default email address this site appears to send from. For example: "sender@example.com" or "Sender Name <sender@example.com>" (without quotes)', max_length=255, verbose_name='From email address'),
+        ),
+        migrations.AddField(
+            model_name='layoutsettings',
+            name='google_maps_api_key',
+            field=models.CharField(blank=True, help_text='The API Key used for Google Maps.', max_length=255, verbose_name='Google Maps API Key'),
+        ),
+        migrations.AddField(
+            model_name='layoutsettings',
+            name='mailchimp_api_key',
+            field=models.CharField(blank=True, help_text='The API Key used for Mailchimp.', max_length=255, verbose_name='Mailchimp API Key'),
+        ),
+        migrations.AddField(
+            model_name='layoutsettings',
+            name='search_num_results',
+            field=models.PositiveIntegerField(default=10, verbose_name='Number of results per page'),
+        ),
+
+        # Copy the settings over.
+        migrations.RunPython(copy_settings),
+
+        # Delete the old fields and models.
+        migrations.RemoveField(
+            model_name='generalsettings',
+            name='site',
+        ),
+        migrations.RemoveField(
+            model_name='googleapisettings',
+            name='site',
+        ),
+        migrations.RemoveField(
+            model_name='mailchimpapisettings',
+            name='site',
+        ),
+        migrations.DeleteModel(
+            name='GeneralSettings',
+        ),
+        migrations.DeleteModel(
+            name='GoogleApiSettings',
+        ),
+        migrations.DeleteModel(
+            name='MailchimpApiSettings',
+        ),
+    ]

+ 7 - 11
coderedcms/models/page_models.py

@@ -80,11 +80,7 @@ from coderedcms.blocks import (
 from coderedcms.fields import CoderedStreamField, ColorField
 from coderedcms.forms import CoderedFormBuilder, CoderedSubmissionsListView
 from coderedcms.models.snippet_models import ClassifierTerm
-from coderedcms.models.wagtailsettings_models import (
-    GeneralSettings,
-    GoogleApiSettings,
-    LayoutSettings,
-)
+from coderedcms.models.wagtailsettings_models import LayoutSettings
 from coderedcms.wagtail_flexible_forms.blocks import (
     FormFieldBlock,
     FormStepBlock,
@@ -1346,7 +1342,7 @@ class CoderedFormMixin(models.Model):
                         context
                     )
                 else:
-                    genemail = GeneralSettings.for_request(
+                    genemail = LayoutSettings.for_request(
                         request
                     ).from_email_address
                     if genemail:
@@ -1412,7 +1408,7 @@ class CoderedFormMixin(models.Model):
             message_args["subject"] = self.subject
         else:
             message_args["subject"] = self.title
-        genemail = GeneralSettings.for_request(request).from_email_address
+        genemail = LayoutSettings.for_request(request).from_email_address
         if genemail:
             message_args["from_email"] = genemail
         if self.reply_address:
@@ -1977,14 +1973,14 @@ class CoderedLocationPage(CoderedWebPage):
     def save(self, *args, **kwargs):
         if (
             self.auto_update_latlng
-            and GoogleApiSettings.for_site(
+            and LayoutSettings.for_site(
                 Site.objects.get(is_default_site=True)
             ).google_maps_api_key
         ):
             try:
                 g = geocoder.google(
                     self.address,
-                    key=GoogleApiSettings.for_site(
+                    key=LayoutSettings.for_site(
                         Site.objects.get(is_default_site=True)
                     ).google_maps_api_key,
                 )
@@ -1998,7 +1994,7 @@ class CoderedLocationPage(CoderedWebPage):
 
     def get_context(self, request, *args, **kwargs):
         context = super().get_context(request)
-        context["google_api_key"] = GoogleApiSettings.for_site(
+        context["google_api_key"] = LayoutSettings.for_site(
             Site.objects.get(is_default_site=True)
         ).google_maps_api_key
         return context
@@ -2094,7 +2090,7 @@ class CoderedLocationIndexPage(CoderedWebPage):
 
     def get_context(self, request, *args, **kwargs):
         context = super().get_context(request)
-        context["google_api_key"] = GoogleApiSettings.for_site(
+        context["google_api_key"] = LayoutSettings.for_site(
             Site.objects.get(is_default_site=True)
         ).google_maps_api_key
         return context

+ 52 - 120
coderedcms/models/wagtailsettings_models.py

@@ -29,7 +29,7 @@ class LayoutSettings(ClusterableModel, BaseSetting):
     """
 
     class Meta:
-        verbose_name = _("Layout")
+        verbose_name = _("CRX Settings")
 
     logo = models.ForeignKey(
         get_image_model_string(),
@@ -109,6 +109,35 @@ class LayoutSettings(ClusterableModel, BaseSetting):
         default="",
         verbose_name=_("Theme variant"),
     )
+    from_email_address = models.CharField(
+        blank=True,
+        max_length=255,
+        verbose_name=_("From email address"),
+        help_text=_(
+            "The default email address this site appears to send from. "
+            'For example: "sender@example.com" or '
+            '"Sender Name <sender@example.com>" (without quotes)'
+        ),
+    )
+    search_num_results = models.PositiveIntegerField(
+        default=10,
+        verbose_name=_("Number of results per page"),
+    )
+    external_new_tab = models.BooleanField(
+        default=False, verbose_name=_("Open all external links in new tab")
+    )
+    google_maps_api_key = models.CharField(
+        blank=True,
+        max_length=255,
+        verbose_name=_("Google Maps API Key"),
+        help_text=_("The API Key used for Google Maps."),
+    )
+    mailchimp_api_key = models.CharField(
+        blank=True,
+        max_length=255,
+        verbose_name=_("Mailchimp API Key"),
+        help_text=_("The API Key used for Mailchimp."),
+    )
 
     panels = [
         MultiFieldPanel(
@@ -118,11 +147,6 @@ class LayoutSettings(ClusterableModel, BaseSetting):
             ],
             heading=_("Branding"),
         ),
-        InlinePanel(
-            "site_navbar",
-            help_text=_("Choose one or more navbars for your site."),
-            heading=_("Site Navbars"),
-        ),
         MultiFieldPanel(
             [
                 FieldPanel("navbar_color_scheme"),
@@ -135,6 +159,17 @@ class LayoutSettings(ClusterableModel, BaseSetting):
             ],
             heading=_("Site Navbar Layout"),
         ),
+        MultiFieldPanel(
+            [
+                FieldPanel("frontend_theme"),
+            ],
+            heading=_("Theming"),
+        ),
+        InlinePanel(
+            "site_navbar",
+            help_text=_("Choose one or more navbars for your site."),
+            heading=_("Site Navbars"),
+        ),
         InlinePanel(
             "site_footer",
             help_text=_("Choose one or more footers for your site."),
@@ -142,9 +177,18 @@ class LayoutSettings(ClusterableModel, BaseSetting):
         ),
         MultiFieldPanel(
             [
-                FieldPanel("frontend_theme"),
+                FieldPanel("from_email_address"),
+                FieldPanel("search_num_results"),
+                FieldPanel("external_new_tab"),
             ],
-            heading=_("Theming"),
+            heading=_("General"),
+        ),
+        MultiFieldPanel(
+            [
+                FieldPanel("google_maps_api_key"),
+                FieldPanel("mailchimp_api_key"),
+            ],
+            heading=_("API Keys"),
         ),
     ]
 
@@ -296,115 +340,3 @@ class AnalyticsSettings(BaseSetting):
             heading=_("Other Tracking Scripts"),
         ),
     ]
-
-
-@register_setting(icon="cr-universal-access")
-class ADASettings(BaseSetting):
-    """
-    Accessibility related options.
-    """
-
-    class Meta:
-        verbose_name = "Accessibility"
-
-    skip_navigation = models.BooleanField(
-        default=False,
-        verbose_name=_("Show skip navigation link"),
-        help_text=_(
-            'Shows a "Skip Navigation" link above the navbar that takes you '
-            "directly to the main content."
-        ),
-    )
-
-    panels = [
-        MultiFieldPanel(
-            [
-                FieldPanel("skip_navigation"),
-            ],
-            heading=_("Accessibility"),
-        )
-    ]
-
-
-@register_setting(icon="cog")
-class GeneralSettings(BaseSetting):
-    """
-    Various site-wide settings. A good place to put
-    one-off settings that don't belong anywhere else.
-    """
-
-    from_email_address = models.CharField(
-        blank=True,
-        max_length=255,
-        verbose_name=_("From email address"),
-        help_text=_(
-            "The default email address this site appears to send from. "
-            'For example: "sender@example.com" or '
-            '"Sender Name <sender@example.com>" (without quotes)'
-        ),
-    )
-    search_num_results = models.PositiveIntegerField(
-        default=10,
-        verbose_name=_("Number of results per page"),
-    )
-    external_new_tab = models.BooleanField(
-        default=False, verbose_name=_("Open all external links in new tab")
-    )
-
-    panels = [
-        MultiFieldPanel(
-            [
-                FieldPanel("from_email_address"),
-            ],
-            _("Email"),
-        ),
-        MultiFieldPanel(
-            [
-                FieldPanel("search_num_results"),
-            ],
-            _("Search Settings"),
-        ),
-        MultiFieldPanel(
-            [
-                FieldPanel("external_new_tab"),
-            ],
-            _("Links"),
-        ),
-    ]
-
-    class Meta:
-        verbose_name = _("General")
-
-
-@register_setting(icon="cr-puzzle-piece")
-class GoogleApiSettings(BaseSetting):
-    """
-    Settings for Google API services.
-    """
-
-    class Meta:
-        verbose_name = _("Google API")
-
-    google_maps_api_key = models.CharField(
-        blank=True,
-        max_length=255,
-        verbose_name=_("Google Maps API Key"),
-        help_text=_("The API Key used for Google Maps."),
-    )
-
-
-@register_setting(icon="cr-puzzle-piece")
-class MailchimpApiSettings(BaseSetting):
-    """
-    Settings for Mailchimp API services.
-    """
-
-    class Meta:
-        verbose_name = _("Mailchimp API")
-
-    mailchimp_api_key = models.CharField(
-        blank=True,
-        max_length=255,
-        verbose_name=_("Mailchimp API Key"),
-        help_text=_("The API Key used for Mailchimp."),
-    )

+ 3 - 3
coderedcms/settings.py

@@ -129,7 +129,7 @@ class _DefaultSettings:
         ("minty", "Minty - A fresh feel"),
         ("morph", "Morph - A neumorphic layer"),
         ("pulse", "Pulse - A trace of purple"),
-        ("quartz", "A glassmorphic layer"),
+        ("quartz", "Quartz - A glassmorphic layer"),
         ("sandstone", "Sandstone - A touch of warmth"),
         ("simplex", "Simplex - Mini and minimalist"),
         ("sketchy", "Sketchy - A hand-drawn look for mockups and mirth"),
@@ -138,9 +138,9 @@ class _DefaultSettings:
         ("spacelab", "Spacelab - Silvery and sleek"),
         ("superhero", "Superhero - The brave and the blue"),
         ("united", "United - Ubuntu orange and unique font"),
-        ("vapor", "A cyberpunk aesthetic"),
+        ("vapor", "Vapor - A cyberpunk aesthetic"),
         ("yeti", "Yeti - A friendly foundation"),
-        ("zephyr", "Breezy and beautiful"),
+        ("zephyr", "Zephyr - Breezy and beautiful"),
     ]
 
     CRX_FRONTEND_TEMPLATES_BLOCKS = {

+ 1 - 1
coderedcms/templates/coderedcms/blocks/google_map.html

@@ -1,7 +1,7 @@
 <div class="ratio ratio-16x9 {{self.settings.custom_css_class}}"
   {% if self.settings.custom_id %}id="{{self.settings.custom_id}}"{% endif %}>
   {% if self.place_id %}
-  <iframe src="https://www.google.com/maps/embed/v1/place?q=place_id:{{ self.place_id }}&zoom={{ self.map_zoom_level }}&key={{ settings.coderedcms.GoogleApiSettings.google_maps_api_key}}" title="{{self.map_title}}" allowfullscreen></iframe>
+  <iframe src="https://www.google.com/maps/embed/v1/place?q=place_id:{{ self.place_id }}&zoom={{ self.map_zoom_level }}&key={{ settings.coderedcms.LayoutSettings.google_maps_api_key}}" title="{{self.map_title}}" allowfullscreen></iframe>
   {% else %}
   <iframe src="https://maps.google.com/maps?q={{ self.search|urlencode }}&output=embed" title="{{self.map_title}}" allowfullscreen></iframe>
   {% endif %}

+ 2 - 4
coderedcms/templates/coderedcms/pages/base.html

@@ -45,7 +45,7 @@
   {# Pass in CMS variables to JavaScript #}
   <script>
     cr_site_url = "{{site.root_url}}";
-    cr_external_new_tab = {{settings.coderedcms.GeneralSettings.external_new_tab|yesno:"true,false"}};
+    cr_external_new_tab = {{settings.coderedcms.LayoutSettings.external_new_tab|yesno:"true,false"}};
     cr_version = "{% coderedcms_version %}";
   </script>
 
@@ -99,9 +99,7 @@
   {% include "coderedcms/includes/codered_banner.html" %}
 
   {% block ada_skip %}
-  {% if settings.coderedcms.ADASettings.skip_navigation %}
-  <a href='#content' title='Skip Navigation'>Skip Navigation</a>
-  {% endif %}
+  <a class="visually-hidden-focusable" href="#content">Skip navigation</a>
   {% endblock %}
 
   {% wagtailuserbar %}

+ 2 - 6
coderedcms/templates/coderedcms/snippets/navbar.html

@@ -43,13 +43,9 @@
 {% block navbar_offset %}
 {% if settings.coderedcms.LayoutSettings.navbar_fixed %}
 {% if settings.coderedcms.LayoutSettings.logo %}
-<div
-  class="{{settings.coderedcms.LayoutSettings.navbar_format}}-fixed-img-offset {{settings.coderedcms.LayoutSettings.navbar_collapse_mode}}">
-</div>
+<div class="{{settings.coderedcms.LayoutSettings.navbar_format}}-fixed-img-offset {{settings.coderedcms.LayoutSettings.navbar_collapse_mode}}"></div>
 {% else %}
-<div
-  class="{{settings.coderedcms.LayoutSettings.navbar_format}}-fixed-offset {{settings.coderedcms.LayoutSettings.navbar_collapse_mode}}">
-</div>
+<div class="{{settings.coderedcms.LayoutSettings.navbar_format}}-fixed-offset {{settings.coderedcms.LayoutSettings.navbar_collapse_mode}}"></div>
 {% endif %}
 {% endif %}
 {% endblock %}

+ 0 - 37
coderedcms/tests/testapp/models.py

@@ -17,10 +17,6 @@ from coderedcms.models import (
 
 
 class ArticlePage(CoderedArticlePage):
-    """
-    Article, suitable for news or blog content.
-    """
-
     class Meta:
         verbose_name = "Article"
         ordering = [
@@ -35,10 +31,6 @@ class ArticlePage(CoderedArticlePage):
 
 
 class ArticleIndexPage(CoderedArticleIndexPage):
-    """
-    Shows a list of article sub-pages.
-    """
-
     class Meta:
         verbose_name = "Article Landing Page"
 
@@ -54,10 +46,6 @@ class ArticleIndexPage(CoderedArticleIndexPage):
 
 
 class FormPage(CoderedFormPage):
-    """
-    A page with an html <form>.
-    """
-
     class Meta:
         verbose_name = "Form"
 
@@ -65,10 +53,6 @@ class FormPage(CoderedFormPage):
 
 
 class FormPageField(CoderedFormField):
-    """
-    A field that links to a FormPage.
-    """
-
     class Meta:
         ordering = ["sort_order"]
 
@@ -76,18 +60,11 @@ class FormPageField(CoderedFormField):
 
 
 class FormConfirmEmail(CoderedEmail):
-    """
-    Sends a confirmation email after submitting a FormPage.
-    """
 
     page = ParentalKey("FormPage", related_name="confirmation_emails")
 
 
 class WebPage(CoderedWebPage):
-    """
-    General use page with featureful streamfield and SEO attributes.
-    """
-
     class Meta:
         verbose_name = "Web Page"
 
@@ -104,10 +81,6 @@ class EventPage(CoderedEventPage):
 
 
 class EventIndexPage(CoderedEventIndexPage):
-    """
-    Shows a list of event sub-pages.
-    """
-
     class Meta:
         verbose_name = "Events Landing Page"
 
@@ -125,10 +98,6 @@ class EventOccurrence(CoderedEventOccurrence):
 
 
 class LocationPage(CoderedLocationPage):
-    """
-    A page that holds a location.  This could be a store, a restaurant, etc.
-    """
-
     class Meta:
         verbose_name = "Location Page"
 
@@ -139,12 +108,6 @@ class LocationPage(CoderedLocationPage):
 
 
 class LocationIndexPage(CoderedLocationIndexPage):
-    """
-    A page that holds a list of locations and displays them with a Google Map.
-    This does require a Google Maps API Key that can be defined in Settings >
-    Google API Settings
-    """
-
     class Meta:
         verbose_name = "Location Landing Page"
 

+ 2 - 2
coderedcms/views.py

@@ -24,7 +24,7 @@ from wagtail.admin import messages
 from wagtail.models import Page, get_page_models
 from coderedcms import utils
 from coderedcms.forms import SearchForm
-from coderedcms.models import CoderedPage, GeneralSettings, LayoutSettings
+from coderedcms.models import CoderedPage, LayoutSettings
 from coderedcms.importexport import (
     convert_csv_to_json,
     import_pages,
@@ -70,7 +70,7 @@ def search(request):
         if results:
             results = results.search(search_query)
             paginator = Paginator(
-                results, GeneralSettings.for_request(request).search_num_results
+                results, LayoutSettings.for_request(request).search_num_results
             )
             page = request.GET.get("p", 1)
             try:

+ 1 - 1
docs/advanced/advanced01.rst

@@ -227,7 +227,7 @@ As you can see, you may not need to use a lot of custom CSS. Sometimes a Bootstr
 Sometimes all you need to do is customize your template HTML and then add Bootstrap classes as needed. It all
 depends on your use case.
 
-For our custom navbar, we needed to un-check the "fixed navbar" option in the CMS via **Settings > Layout** in
+For our custom navbar, we needed to un-check the "fixed navbar" option in the CMS via **Settings > CRX Settings** in
 order for it to work. Check out what our 2-tiered navbar looks like:
 
 .. figure:: img/advanced_two_tiered_navbar.png

+ 2 - 2
docs/features/import_export.rst

@@ -1,5 +1,5 @@
-Import/Export
-=============
+Import Pages
+============
 
 CRX includes the ability to import pages from CSV files. This is useful for
 example in a store locator, where a list of stores needs to be uploaded

+ 2 - 2
docs/features/page_types/location_pages.rst

@@ -70,7 +70,7 @@ the following to your ``website/models.py``::
     class LocationIndexPage(CoderedLocationIndexPage):
         """
         A page that holds a list of locations and displays them with a Google Map.
-        This does require a Google Maps API Key that can be defined in Settings > Google API Settings
+        This does require a Google Maps API Key in Settings > CRX Settings
         """
         class Meta:
             verbose_name = 'Location Landing Page'
@@ -87,7 +87,7 @@ Next run ``python manage.py makemigrations website`` and ``python manage.py migr
 the new pages in your project.
 
 Now when going to the wagtail admin, you can create a Location Index Page, and child Location Pages.
-Also be sure to add a Google Maps API key under Settings > Google API Settings.
+Also be sure to add a Google Maps API key under Settings > CRX Settings.
 
 .. note::
     Before creating or importing location pages, add your Google API key for automatic geolocation.

+ 2 - 2
docs/features/searching.rst

@@ -3,8 +3,8 @@ Searching
 
 A search page is available by default at the ``/search/`` URL, which can be customized in the
 ``urls.py`` file in your project. To enable a search bar in the navigation bar, check
-Settings > Layout > Search box. Search results are paginated; to specify the number of results
-per page, edit the value in Settings > General > Search Settings.
+Settings > CRX Settings > Search box. Search results are paginated; to specify the number of results
+per page, edit the value in Settings > CRX Settings > Search Settings.
 
 Search result formatting
 ------------------------

+ 1 - 1
docs/features/snippets/footers.rst

@@ -19,4 +19,4 @@ Fields
 Site Footers
 ------------
 
-In **Settings > Layout**, select which Footers you want to display on your site under the Site Footers section.
+In **Settings > CRX Settings**, select which Footers you want to display on your site under the Site Footers section.

+ 1 - 1
docs/features/snippets/navigation_bars.rst

@@ -40,4 +40,4 @@ Document Link With Sub-Links
 Site Navbars
 ------------
 
-In **Settings > Layout**, select which Navbars you want to display on your site under the Site Navbars section.
+In **Settings > CRX Settings**, select which Navbars you want to display on your site under the Site Navbars section.

+ 1 - 1
docs/getting_started/customize_design.rst

@@ -23,7 +23,7 @@ Logo & icon
 -----------
 
 The logo that appears in the navbar, the wagtail admin, and your favicon can be set in
-Settings > Layout. Here you can also change navbar settings (based on Bootstrap CSS framework).
+Settings > CRX Settings. Here you can also change navbar settings (based on Bootstrap CSS framework).
 
 :ref:`logo`
 

+ 2 - 2
docs/getting_started/tutorial01.rst

@@ -54,7 +54,7 @@ will show "Simple Sweet Desserts".
 Adding your logo
 ----------------
 
-First, and most important, is the logo. Go to **Settings > Layout**. Here are the site-wide
+First, and most important, is the logo. Go to **Settings > CRX Settings**. Here are the site-wide
 visual and design settings for your website. At the top are two settings for your logo and
 favicon. Both will be scaled to fit wherever they are used, but we recommend
 the following image parameters:
@@ -89,7 +89,7 @@ Changing navbar and global site colors
 
 The default style is a light-colored navbar and the standard Bootstrap colors.
 But if you have a white or light colored logo, you might prefer a dark navbar.
-To change the navbar color, go to **Settings > Layout** and alter the following settings:
+To change the navbar color, go to **Settings > CRX Settings** and alter the following settings:
 
 * **Navbar color scheme:** Dark
 * **Navbar CSS class:** ``bg-dark`` (or some other CSS class. See

+ 3 - 3
docs/getting_started/tutorial03.rst

@@ -8,7 +8,7 @@ Let's begin to work on our navigation and footer setup.
 Customizing the navigation
 --------------------------
 
-The general layout of your navbar can be found in the **Settings > Layout**
+The general layout of your navbar can be found in the **Settings > CRX Settings**
 section of the Wagtail Admin. We previously discussed choosing a dark or
 light navbar and adding Bootstrap classes, but you can also add/remove the
 Search bar, set it to fixed (stays at the top even when you scroll) or full-width,
@@ -66,7 +66,7 @@ for our sweets shop!
 Site Navbars Settings
 ---------------------
 
-After you create your navbar, go to **Settings > Layout** and scroll down to **Site Navbars**. Click on the plus sign
+After you create your navbar, go to **Settings > CRX Settings** and scroll down to **Site Navbars**. Click on the plus sign
 to select your new navbar and add it to your site. The Save.
 
 .. _footer:
@@ -147,5 +147,5 @@ then choosing which page or external link you want. See our example below:
 Site Footers Settings
 ---------------------
 
-After you create your footer, go to **Settings > Layout** and scroll down to **Site Footers**. Click on the plus sign
+After you create your footer, go to **Settings > CRX Settings** and scroll down to **Site Footers**. Click on the plus sign
 to select your new footer and add it to your site. The Save.

+ 1 - 1
docs/how_to/headers_and_footers.rst

@@ -57,7 +57,7 @@ footer.html`_, but not necessary.
 
 .. note::
 
-    You can now create more than one navbar menu or footer and choose which ones to render on your site. In **Settings > Layout**,
+    You can now create more than one navbar menu or footer and choose which ones to render on your site. In **Settings > CRX Settings**,
     select your navbars in **Site Navbars**. Select your footers in **Site Footers**. The Site Navbar Layout includes settings for the whole
     navbar, while the Site Navbar chooser allows you to choose which menu you want for your site. This features allows you to
     select a different navbar/footer per site in a multisite installation OR render several navbars/footers in selected order

+ 1 - 1
docs/how_to/link_targets.rst

@@ -11,5 +11,5 @@ Wagtail CRX provides a setting that will use JavaScript to open all external
 links, meaning any link not on the current domain, to open with
 ``target='_blank'``:
 
-**Settings > General > Open all external links in
+**Settings > CRX Settings > Open all external links in
 new tab**