From 461320eeeea0981af22e46e9faac7056e3d6ccf2 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 4 Oct 2023 14:15:54 +0200 Subject: [PATCH 01/67] add initial styleguide stylesheet based on bootstrap 5's docs pages --- .../static/hqwebapp/scss/styleguide.scss | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss diff --git a/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss b/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss new file mode 100644 index 000000000000..82ce8f28d2bd --- /dev/null +++ b/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss @@ -0,0 +1,121 @@ +@import "functions"; +@import "commcarehq/variables"; +@import "variables"; +@import "variables-dark"; + +// Layout structure inspired by Bootstrap's 5.3 docs page + +.sg-gutter { + --bs-gutter-x: 3rem; +} + +.sg-layout { + display: grid; + grid-template-areas: "sidebar main"; + grid-template-columns: 1fr 5fr; + gap: 1.5rem; + font-size: 1rem; +} + +.sg-sidebar { + grid-area: sidebar; + + @media (min-width: 992px) { + position: -webkit-sticky; + position: sticky; + top: 5rem; + display: block !important; + height: calc(100vh - 6rem); + padding-left: 0.25rem; + margin-left: -0.25rem; + overflow-y: auto; + } +} + +.sg-main { + grid-area: main; + + grid-template-areas: + "intro toc" + "content toc"; + grid-template-rows: auto 1fr; + grid-template-columns: 4fr 1fr; + + @media (min-width: 768px) { + display: grid; + gap: inherit; + } +} + +.sg-title { + font-size: 3rem; +} + +.sg-lead { + font-size: 1.5rem; +} + +.sg-intro { + grid-area: intro; +} + +.sg-toc { + grid-area: toc; + font-size: 1rem; + + @media (min-width: 992px) { + position: -webkit-sticky; + position: sticky; + top: 5rem; + right: 0; + z-index: 2; + height: calc(100vh - 7rem); + overflow-y: auto; + } + +} + +.sg-toc nav { + font-size: 0.875rem; + + ul { + padding-left: 0; + margin-bottom: 0; + list-style: none; + + ul { + padding-left: 1rem; + } + } + + a { + display: block; + padding: 0.125rem 0 0.125rem 0.75rem; + text-decoration: none; + border-left: 0.125rem solid transparent; + + &.active { + font-weight: 500; + border-left-color: $color-purple-dark; + } + } + +} + +.sg-content { + grid-area: content; + min-width: 1px; +} +.sg-links-link { + padding: 3px 10px; + display: block; + + &.active { + font-weight: 600; + } + + &.active, + &:hover { + background-color: $cc-brand-hi; + } +} From df81609aae2acfedf90b2cd0cb717da61ce2ebf8 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 4 Oct 2023 14:16:47 +0200 Subject: [PATCH 02/67] add first bootstrap 5 styleguide view --- corehq/apps/styleguide/context.py | 18 +++ .../templates/styleguide/bootstrap5/base.html | 90 ++++++++++++ .../templates/styleguide/bootstrap5/home.html | 139 ++++++++++++++++++ .../bootstrap5/partials/sidebar.html | 32 ++++ corehq/apps/styleguide/urls.py | 3 + corehq/apps/styleguide/views/bootstrap5.py | 7 + 6 files changed, 289 insertions(+) create mode 100644 corehq/apps/styleguide/context.py create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/home.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/partials/sidebar.html create mode 100644 corehq/apps/styleguide/views/bootstrap5.py diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py new file mode 100644 index 000000000000..2317308d6c98 --- /dev/null +++ b/corehq/apps/styleguide/context.py @@ -0,0 +1,18 @@ +from collections import namedtuple + +NavigationGroup = namedtuple('NavigationGroup', 'name pages') +Page = namedtuple('Page', 'name urlname') + + +def get_navigation_context(current_page): + return { + 'current_page': current_page, + 'sidebar': [ + NavigationGroup( + name="Getting started", + pages=[ + Page("Introduction", 'styleguide_home_b5'), + ], + ) + ], + } diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html new file mode 100644 index 000000000000..dac11b8b9945 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html @@ -0,0 +1,90 @@ +{% load compress %}{% load hq_shared_tags %}{% load statici18n %} + + + CommCare HQ Style Guide (Bootstrap 5) + + + + + {% include 'hqwebapp/includes/bootstrap5/core_stylesheets.html' %} + {% compress css %} + + + + + {% endcompress %} + + {% javascript_libraries hq=True use_bootstrap5=True %} + + + + +
+ +
+
+ {% block intro %} + {% endblock intro %} +
+
+ {% block toc %} + {% endblock toc %} +
+
+ {% block content %} + {% endblock content %} +
+
+
+ + + {# Knockout component templates #} + {% include 'hqwebapp/partials/bootstrap5/ko_pagination.html' %} + {% include 'hqwebapp/partials/bootstrap5/ko_inline_edit.html' %} + {% include 'hqwebapp/partials/bootstrap5/ko_search_box.html' %} + {% include 'hqwebapp/partials/bootstrap5/ko_select_toggle.html' %} + {% include 'hqwebapp/partials/bootstrap5/ko_feedback.html' %} + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/home.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/home.html new file mode 100644 index 000000000000..7ac4b82105cc --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/home.html @@ -0,0 +1,139 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

How to Use This Guide

+

+ This is a communication and reference tool. It can be used to help make decisions that + have already been thoughtfully made. +

+{% endblock intro %} + +{% block toc %} +
On this page
+
+ +{% endblock toc %} + +{% block content %} +

Atomic Design and how we organize stylistic concepts

+

+ Why all the biology-related terminology? It comes from the notion of atomic design. + Atomic design relates design to the hierarchies and building processes of the natural world. + It uses five stages: atoms, molecules, organisms, templates, and pages. +

+

+ HQ doesn't completely follow this methodology, but the rough ideas can still make for + a useful communication framework. +

+

+ By taking similar, simplified base patterns, often called atoms, + we can build cohesive molecules and then more complex organisms. + This keeps code cleaner and lighter while also keeping things simpler for our users to understand. +

+

+ Some general principles to keep in mind: +

+ + +

Atoms

+

+ This section discusses the most basic elements of design on HQ. + Much of this information is a level of detail that developers don't deal with on a day-to-day basis: + the fonts, colors, etc. that underlie the classes and widgets used to build pages. +

+ + +

Molecules

+

+ This section covers the most common components used in CommCare HQ and how to use them well. + Additionally, it covers any modifications or additions that have been made to these components + on top of what might be supported by Bootstrap's framework by default. +

+

+ These "molecules" build on the base concepts like typography, colors, and accessibility introduced in the atoms + section. +

+

+ A key point of this section is to keep concepts and design focused in order + to avoid the phenomenon of + analysis paralysis. +

+ + +

Organisms

+

+ Molecules connect into organisms: even larger building blocks, the kind that make up a substantial + portion of the design of a new feature or significant update to an existing feature. +

+

+ It's often said that CommCare HQ is basically a site of forms and tables, as those are the biggest "organisms" + that make their way to new features and pages. +

+

+ Very rarely are other "organisms" introduced, and covering that is outside the scope of this guide and will + likely be part of a greater Design Spec discussion. +

+ + +

Templates and Pages

+

+ Templates structure free-floating molecules and organisms into a context: a specific page. +

+ +{% endblock content %} diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/partials/sidebar.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/partials/sidebar.html new file mode 100644 index 000000000000..6c8a17f59760 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/partials/sidebar.html @@ -0,0 +1,32 @@ +
+
+
+ Browse Guide +
+
+
+ +
+
\ No newline at end of file diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index a3b62222b08e..8e90f3c4bd1f 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -9,6 +9,8 @@ ) from corehq.apps.styleguide.views.docs import default +from corehq.apps.styleguide.views import bootstrap5 + doc_urlpatterns = [ url(r'^$', default, name='sg_examples_default'), url(r'^simple_crispy/', @@ -26,4 +28,5 @@ url(r'^pages/$', PagesStyleGuideView.as_view(), name=PagesStyleGuideView.urlname), url(r'^docs/', include(doc_urlpatterns)), + url(r'^b5/$', bootstrap5.styleguide_home, name="styleguide_home_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py new file mode 100644 index 000000000000..072bd4c3df3b --- /dev/null +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -0,0 +1,7 @@ +from django.shortcuts import render + +from corehq.apps.styleguide.context import get_navigation_context + + +def styleguide_home(request): + return render(request, 'styleguide/bootstrap5/home.html', get_navigation_context("styleguide_home_b5")) From 00862a70313e9dc95a981c1e1c13c054ba6d4000 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 4 Oct 2023 16:03:01 +0200 Subject: [PATCH 03/67] add page on accessibility --- corehq/apps/styleguide/context.py | 8 +- .../bootstrap5/atoms/accessibility.html | 157 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 5 + 4 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/accessibility.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 2317308d6c98..067acaac33ed 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -13,6 +13,12 @@ def get_navigation_context(current_page): pages=[ Page("Introduction", 'styleguide_home_b5'), ], - ) + ), + NavigationGroup( + name="Atoms", + pages=[ + Page("Accessibility", 'styleguide_atoms_accessibility_b5'), + ], + ), ], } diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/accessibility.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/accessibility.html new file mode 100644 index 000000000000..7731fbef7739 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/accessibility.html @@ -0,0 +1,157 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

Accessibility

+

+ Dimagi’s product design team firmly believes that web and + software experiences should be accessible for everyone, + regardless of abilities or impairments. +

+{% endblock intro %} + +{% block toc %} +
On this page
+
+ +{% endblock toc %} + +{% block content %} +

+ Overview +

+

+ This guide will help ensure that our experiences meet the standards for + accessibility required by law (WCAG AA, Section 508, European Standards). Patterns should be perceivable, operable, + and understandable to users, even when using assistive technology. +

+

+ Audience +

+

+ Accessible products give every user the same benefits regardless of ability and can adapt to any user in any + context. Disabilities can be situational (an end user with typical vision may struggle to view their screen in a + bright or sunny environment), temporary (a person with a broken wrist may not be able to type in HQ but will regain + ability when healed), and long-lasting (barriers from birth, an illness, disease, accident, or developed over age; + some may not consider themselves to have disabilities even if they experience functional limitations). We design + and build products for everyone. +

+

+ "Everyone" includes +

+
    +
  • + 18% of adults with vision impairment + (source) +
  • +
  • + 8.6% of adults with hearing trouble (16.8% of U.S. adults!) + (source + and + source) +
  • +
  • + 15% of adults with physical functioning difficulty + (source + and + source) +
  • +
  • + 4.4% of adults with cognitive disabilities + (source) +
  • +
+

+ Consider the following barriers when designing and coding +

+
    +
  • + Blindness (may use screen reader, lack access to mouse, rely on text over visual information +
  • +
  • + Low-Vision (may use screen readers/magnifiers, high contrast or monochrome displays; maximize readability and visual clarity; try NoCoffee plugin +
  • +
  • + Color-blindness (may not be able to differentiate between some colors; test designs in a color-blind simulator) +
  • +
  • + Deaf and Hard-of-Hearing (may rely on captioning and alternative representations of audio +
  • +
  • + Physical Disabilities (may rely on keyboards, trackballs, voice recognition or assistive tech, may lack mouse access +
  • +
  • + Cognitive Disabilities (may have limited working memory, problem solving, attention, reading/linguistic/visual comprehension, + sensitivity to flashing content; try to design linearly and focus on heuristics that have to do with cognitive load and memory) +
  • +
+

+ Color-blindness: A11y Color Contrast Standards +

+
+
+
A11y check
+ AA CONTRAST 4.86:1 + AAA Contrast 7.01:1 +
+ AAA Contrast 12.05:1 + AAA Contrast 11.07:1 +
+
+

+ Throughout the documentation, when possible, we will call out A11y. For example, checking color contrast in + the buttons. We aim for AA compliant color contrast. You can check color contrast in tools such as + https://webaim.org/resources/contrastchecker/. +

+

+ Try Chrome extension Funkify to experience some common barriers. +

+

+ Read more about a11y at +

+ +

+ Designing for Screen Readers +

+

+ In 2020, USH began a web accessibility improvement effort, specifically surrounding screen readers. + This document details + an overview of the effort, deficiencies found by an outside agency of CommCare, recommendations, and resources. +

+

+ Quick ways to test for web accessibility* +

+
    +
  • + Keyboard Navigation: Testing if modified code is navigable by keyboard is an effective way to + test for accessibility. Many users rely on keyboard navigation that are otherwise unable to use a mouse and it’s + also a good indicator if it will be visible to a screen reader. Read more about potential barriers to effective + keyboard navigation and keyboard testing here. +
  • +
  • + Explore the accessibility tree: An accessibility tree is a part of your website's DOM. All + accessible objects are created in the accessibility tree for each DOM element that needs to be exposed to + assistive technologies. From it, you can see how the page elements are included and organized. To view the + accessibility tree of a page under development, we can use + Chrome DevTools' accessibility feature. +
  • +
  • + *this is by no means a complete list and covers only a portion of what makes a site accessible to all users +
  • +
+{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index 8e90f3c4bd1f..a745fb4669b5 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -29,4 +29,6 @@ name=PagesStyleGuideView.urlname), url(r'^docs/', include(doc_urlpatterns)), url(r'^b5/$', bootstrap5.styleguide_home, name="styleguide_home_b5"), + url(r'^b5/atoms/accessibility/$', bootstrap5.styleguide_atoms_accessibility, + name="styleguide_atoms_accessibility_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 072bd4c3df3b..7c0bb9518578 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -5,3 +5,8 @@ def styleguide_home(request): return render(request, 'styleguide/bootstrap5/home.html', get_navigation_context("styleguide_home_b5")) + + +def styleguide_atoms_accessibility(request): + return render(request, 'styleguide/bootstrap5/atoms/accessibility.html', + get_navigation_context("styleguide_atoms_accessibility_b5")) From 842fc1fde06a0666e94fa6b7189e41b82ddbe797 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 4 Oct 2023 16:23:11 +0200 Subject: [PATCH 04/67] add typography section --- corehq/apps/styleguide/context.py | 1 + .../bootstrap5/atoms/typography.html | 88 +++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 5 ++ 4 files changed, 96 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/typography.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 067acaac33ed..08df47f540ed 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -18,6 +18,7 @@ def get_navigation_context(current_page): name="Atoms", pages=[ Page("Accessibility", 'styleguide_atoms_accessibility_b5'), + Page("Typography", 'styleguide_atoms_typography_b5'), ], ), ], diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/typography.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/typography.html new file mode 100644 index 000000000000..d4e7832bd32b --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/typography.html @@ -0,0 +1,88 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

Typography

+

+ Font choice can have a strong yet subtle effect on how users perceive content. +

+{% endblock intro %} + +{% block toc %} +
On this page
+
+ +{% endblock toc %} + +{% block content %} +

+ Font Face +

+

+ HQ uses Nunito Sans as its default font. + This is embdedded in our base template and is consistent with dimagi.com. +

+
+
+
+
+

Nunito Sans H1

+

Nunito Sans H2

+

Nunito Sans H3

+

Nunito Sans H4

+
Nunito Sans H5
+
Nunito Sans H6
+

Nunito Sans paragraph

+

Nunito Sans strong

+

Nunito Sans emphasis

+
+
+
+
+
+
+

Nunito Sans H1

+

Nunito Sans H2

+

Nunito Sans H3

+

Nunito Sans H4

+
Nunito Sans H5
+
Nunito Sans H6
+

Nunito Sans paragraph

+

Nunito Sans strong

+

Nunito Sans emphasis

+
+
+
+
+

+ Further Reading +

+ +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index a745fb4669b5..c9001f166ae8 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -31,4 +31,6 @@ url(r'^b5/$', bootstrap5.styleguide_home, name="styleguide_home_b5"), url(r'^b5/atoms/accessibility/$', bootstrap5.styleguide_atoms_accessibility, name="styleguide_atoms_accessibility_b5"), + url(r'^b5/atoms/typography/$', bootstrap5.styleguide_atoms_typography, + name="styleguide_atoms_typography_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 7c0bb9518578..6bf97147df62 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -10,3 +10,8 @@ def styleguide_home(request): def styleguide_atoms_accessibility(request): return render(request, 'styleguide/bootstrap5/atoms/accessibility.html', get_navigation_context("styleguide_atoms_accessibility_b5")) + + +def styleguide_atoms_typography(request): + return render(request, 'styleguide/bootstrap5/atoms/typography.html', + get_navigation_context("styleguide_atoms_typography_b5")) From f9a0f8d213dc6aa3ddf7797864b6dbdc80e50992 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 4 Oct 2023 16:23:32 +0200 Subject: [PATCH 05/67] embed nunito sans in base styleguide stylesheet --- .../apps/styleguide/templates/styleguide/bootstrap5/base.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html index dac11b8b9945..991de8e2fabd 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html @@ -6,6 +6,8 @@ + + {% include 'hqwebapp/includes/bootstrap5/core_stylesheets.html' %} {% compress css %} Date: Fri, 6 Oct 2023 14:32:50 +0000 Subject: [PATCH 06/67] add colors page in styleguide --- corehq/apps/styleguide/context.py | 60 +++++++++++++++ .../styleguide/bootstrap5/atoms/colors.html | 73 +++++++++++++++++++ .../bootstrap5/atoms/partials/swatch.html | 14 ++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 15 +++- 5 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/colors.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/swatch.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 08df47f540ed..839d0912db6b 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -2,6 +2,8 @@ NavigationGroup = namedtuple('NavigationGroup', 'name pages') Page = namedtuple('Page', 'name urlname') +ColorGroup = namedtuple('ColorGroup', 'title description main_color') +Color = namedtuple('Color', 'slug hex') def get_navigation_context(current_page): @@ -19,7 +21,65 @@ def get_navigation_context(current_page): pages=[ Page("Accessibility", 'styleguide_atoms_accessibility_b5'), Page("Typography", 'styleguide_atoms_typography_b5'), + Page("Colors", 'styleguide_atoms_colors_b5'), ], ), ], } + + +def get_interaction_colors(): + return [ + ColorGroup( + title="Call to Action", + description="Referred to as 'CommCare Blue'. " + "Use for buttons, checkmarks, radio buttons or actionable primary icons. " + "Links are a slightly darkened shade of this color to improve contrast.", + main_color=Color('primary', '5D70D2'), + ), + ColorGroup( + title="Download / Upload", + description="Used typically for buttons indicating a download or upload action. " + "Corresponds with 'info' classes", + main_color=Color('info', '01A2A9'), + ), + ColorGroup( + title="Success", + description="Use when an action has been completed successfully, primarily for messaging. " + "Rarely used for interactive elements like buttons.", + main_color=Color('success', '3FA12A'), + ), + ColorGroup( + title="Attention", + description="Use for warning-level information, less severe than an error but still in " + "need of attention.", + main_color=Color('warning', 'EEAE00'), + ), + ColorGroup( + title="Error, Negative Attention", + description="Use to highlight an error, something negative or a critical risk. " + "Use as text, highlights, banners or destructive buttons. ", + main_color=Color('danger', 'E73C27'), + ), + ] + + +def get_neutral_colors(): + return [ + ColorGroup( + title="Text", + description="Used for the main text color.", + main_color=Color('dark', '343A40'), + ), + ColorGroup( + title="Neutral", + description="Use for neutral visual indicators, typically borders or backgrounds.", + main_color=Color('secondary', '6C757D'), + ), + ColorGroup( + title="Background", + description="Used for backgrounds that are light but distinct from the default white background, " + "such as cards.", + main_color=Color('light', 'F8F9FA'), + ), + ] diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/colors.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/colors.html new file mode 100644 index 000000000000..99f7f1e2fa54 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/colors.html @@ -0,0 +1,73 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

Colors

+

+ Use color for communication over decoration. + Use of color should be purposeful, accessible, and help focus attention to what matters most. +

+{% endblock intro %} + +{% block toc %} +
On this page
+
+ +{% endblock toc %} + +{% block content %} +

+ Colors for Communication +

+

+ We strive to establish recognizable patterns to guide users through the UI. + CommCare uses similar palettes on both the mobile and server side. +

+

+ When combining colors, use light text on a dark or medium background + and dark text on a light background. We make use of Bootstrap 5's + $min-contrast-ratio setting at a value of + 3 to automatically determine when to show dark or light text on a background when using + the text-bg-<$color> class on an element. +

+

+ As described in Accessibility, + many people are affected by various types of color blindness. + It is important to make sure that colors are never the source + of critical information. Also, when colors are used to compare information + (legend of a bar or line chart) it is important that the colors used + can be differentiated by people with each type of color blindness, and when color separation is + not easily possible, distinguishable patterns are used in their place. +

+ +

+ Interaction and Attention +

+

+ For specific usage (with different shades), please refer to things like Buttons and Alerts in the + Molecules section. This is intended for quick reference and to convey big-picture ideas. +

+
+ {% for swatch in interaction %} + {% include 'styleguide/bootstrap5/atoms/partials/swatch.html' %} + {% endfor %} +
+ +

+ Neutral Colors, Text and Backgrounds +

+
+ {% for swatch in neutral %} + {% include 'styleguide/bootstrap5/atoms/partials/swatch.html' %} + {% endfor %} +
+{% endblock content %} diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/swatch.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/swatch.html new file mode 100644 index 000000000000..399dc7dfb1e1 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/swatch.html @@ -0,0 +1,14 @@ +
+
+
+

{{ swatch.title }}

+ + ${{ swatch.main_color.slug }} + + + #{{ swatch.main_color.hex }} + +
+
+

{{ swatch.description }}

+
diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index c9001f166ae8..a5876c58a891 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -33,4 +33,6 @@ name="styleguide_atoms_accessibility_b5"), url(r'^b5/atoms/typography/$', bootstrap5.styleguide_atoms_typography, name="styleguide_atoms_typography_b5"), + url(r'^b5/atoms/colors/$', bootstrap5.styleguide_atoms_colors, + name="styleguide_atoms_colors_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 6bf97147df62..75bc229ad2ba 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -1,6 +1,10 @@ from django.shortcuts import render -from corehq.apps.styleguide.context import get_navigation_context +from corehq.apps.styleguide.context import ( + get_navigation_context, + get_interaction_colors, + get_neutral_colors, +) def styleguide_home(request): @@ -15,3 +19,12 @@ def styleguide_atoms_accessibility(request): def styleguide_atoms_typography(request): return render(request, 'styleguide/bootstrap5/atoms/typography.html', get_navigation_context("styleguide_atoms_typography_b5")) + + +def styleguide_atoms_colors(request): + context = get_navigation_context("styleguide_atoms_colors_b5") + context.update({ + 'interaction': get_interaction_colors(), + 'neutral': get_neutral_colors(), + }) + return render(request, 'styleguide/bootstrap5/atoms/colors.html', context) From 82e88a5099eb4ade332b9c5b9c4ae967c9a28229 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Fri, 6 Oct 2023 16:54:19 +0000 Subject: [PATCH 07/67] adding icons section to stylesheet b5 --- corehq/apps/styleguide/context.py | 47 ++++ .../styleguide/bootstrap5/atoms/icons.html | 227 ++++++++++++++++++ .../bootstrap5/atoms/partials/icon_set.html | 15 ++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/__init__.py | 46 +--- corehq/apps/styleguide/views/bootstrap5.py | 11 + 6 files changed, 308 insertions(+), 40 deletions(-) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/icon_set.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 839d0912db6b..549000ee284c 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -22,6 +22,7 @@ def get_navigation_context(current_page): Page("Accessibility", 'styleguide_atoms_accessibility_b5'), Page("Typography", 'styleguide_atoms_typography_b5'), Page("Colors", 'styleguide_atoms_colors_b5'), + Page("Icons", 'styleguide_atoms_icons_b5'), ], ), ], @@ -83,3 +84,49 @@ def get_neutral_colors(): main_color=Color('light', 'F8F9FA'), ), ] + + +def get_common_icons(): + return [ + { + 'name': 'Common FontAwesome primary icons', + 'icons': [ + 'fa-plus', 'fa-trash', 'fa-remove', 'fa-search', + 'fa-angle-double-right', 'fa-angle-double-down', + ], + }, + { + 'name': 'Common FontAwesome secondary icons', + 'icons': [ + 'fa-cloud-download', 'fa-cloud-upload', + 'fa-warning', 'fa-info-circle', 'fa-question-circle', 'fa-check', + 'fa-external-link', + ], + } + ] + + +def get_custom_icons(): + return [ + { + 'name': 'Custom HQ icons', + 'icons': [ + 'fcc-flower', 'fcc-applications', 'fcc-commtrack', 'fcc-reports', 'fcc-data', 'fcc-users', + 'fcc-settings', 'fcc-help', 'fcc-exchange', 'fcc-messaging', 'fcc-chart-report', + 'fcc-form-report', 'fcc-datatable-report', 'fcc-piegraph-report', 'fcc-survey', + 'fcc-casemgt', 'fcc-blankapp', 'fcc-globe', 'fcc-app-createform', 'fcc-app-updateform', + 'fcc-app-completeform', + ], + }, + { + 'name': 'Custom HQ icons specific to form builder', + 'icons': [ + 'fcc-fd-text', 'fcc-fd-numeric', 'fcc-fd-data', 'fcc-fd-variable', 'fcc-fd-single-select', + 'fcc-fd-single-circle', 'fcc-fd-multi-select', 'fcc-fd-multi-box', 'fcc-fd-decimal', + 'fcc-fd-long', 'fcc-fd-datetime', 'fcc-fd-audio-capture', 'fcc-fd-android-intent', + 'fcc-fd-signature', 'fcc-fd-multi-box', 'fcc-fd-single-circle', 'fcc-fd-hash', + 'fcc-fd-external-case', 'fcc-fd-external-case-data', 'fcc-fd-expand', 'fcc-fd-collapse', + 'fcc-fd-case-property', 'fcc-fd-edit-form', + ], + }, + ] diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html new file mode 100644 index 000000000000..98427d80c1dd --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html @@ -0,0 +1,227 @@ +{% extends 'styleguide/bootstrap5/base.html' %} +{% load hq_shared_tags %} + +{% block intro %} +

Icons

+

+ Visual communication can be essential in scanning and understanding for populations whose first language + may not be English. Please be sympathetic with the goal of cohesion and don’t use an icon for a purpose it + was not intended for. +

+{% endblock intro %} + +{% block toc %} +
On this page
+
+ +{% endblock toc %} + +{% block content %} +

+ Overview +

+

+ Consistent iconography in any user interface is critical to creating + a product that is highly accessible across all different levels of + literacy. Icons may need to be localized for different cultures and languages. +

+

+ Good icons use simple, graphic shapes so they can be understood even at a small size. + They have little detail. They are as universal as possible, consistent with other + platforms. +

+

+ Primary vs Secondary Icons +

+

+ Primary icons are used for navigation or interaction. + Primary icons are interactive, they change the surround environment or data. They likely don’t need to be coupled with text. +

+

+ Secondary icons provide clarity. + Secondary icons are used before text to communicate topical information. +

+

+ Most of HQ's icons come from + FontAwesome. + All icons in FontAwesome are already built into HQ. + Other icons have been custom created for HQ. +

+ {% include 'styleguide/bootstrap5/atoms/partials/icon_set.html' with prefix="fa" icons=common_icons %} + +

+ Custom Icons +

+

+ HQ has its own set of icons custom created to communicate HQ-specific concepts. The majority of these icons + are found in App Builder and Form Designer. +

+ {% include 'styleguide/bootstrap5/atoms/partials/icon_set.html' with prefix="fcc" icons=custom_icons %} + +

+ Creating New Icons +

+

+ If a suitable icon doesn't exist in FontAwesome or HQ's custom set, + another great resource for icons is the + Noun Project. + Typically, once a Noun Project icon is chosen, + it is best practice to add that icon as a glyph in the CommCare HQ font. +

+

+ On a Mac, the best program to edit this font is + Glyphs. You should open the + CommCareHQFont.glyphs file in Glyphs and add your fonts to an available + private unicode space. +

+

+ Glyphs has a great article on + creating an icon webfont. + If you are adding a new glyph, this is a must-read. Below are some + highlights of the process. +

+
+
+
+
+ +
+
+

Edit the icon in a vector graphics program first

+

+ Open the svg or eps file in either Adobe Illustrator or Inkscape and + make any fine edits necessary to make the icon fit the style of + the rest of the icons available to the CommCare HQ Font. +

+
+
+
+
+
+
+
+
+ +
+
+

Create a new private domain glyph in the CommCare HQ Font

+

+ Open CommCareHQFont.glyphs + in Glyph.app and follow the steps in the + tutorial + to add a new glyph in the private domain. Make sure the unicode + address you've chosen does not overlap with any existing glyphs or + public domain characters. +

+
+
+
+
+
+
+
+
+ +
+
+

Edit the New Glyph

+

+ Copy your vector graphic into the Glyphs glyph editor. Resize as necessary + so that the glyph is large enough to fit in with the rest of the HQ fonts. + Make sure that the L and R values in the glyph info + are never negative (ideally they are both 0). +

+
+
+
+
+
+
+
+
+ +
+
+

Check the Glyph's Scale and Width

+

+ A good way of checking whether your new glyph is sized properly + is to look at it in the Glyphs overview pane and compare it to the + existing glyphs in the font. Make sure that the baseline (bottom of the + glyph) looks natural and that the scale and height of glyph fit with + the rest of the glyphs in the font. +

+
+
+
+
+

+ Saving the Edited Glyphs File +

+

+ Once you've added your new glyph, you will need to export your font + to *.otf. Check Use Production glyph names and + Remove Overlap. +

+

+ Update: Remove Overlap caused the bottom half of the + CommCare flower to be removed. Un-checking that setting seemed to + generate better results. YMMV +

+

+ Save the final *.otf font to + corehq/apps/hqwebapp/static/hqwebapp/font/CommCareHQFont-Regular.otf. +

+

+ Prepping for Cross Browser Compatibility +

+

+ To make the font universally readable across most browsers, you'll need + to have an eot, svg, ttf, + and woff version of it. Use the + Font Squirrel Webfont Generator + to do this. +

+

+ Here are some screenshots of settings for the font generator in + Expert Mode: +

+

+ settings
+ NOTE: unlike in this settings image, select No Subsetting. + Otherwise the private use glyphs will be removed + (source). +

+

+ Copy the resulting eot, svg, ttf, + and woff files to corehq/apps/style/static/style/font/ + when you are done. +

+

+ Adding the New Glyph to the Stylesheet +

+

+ Add a reference to the icon's font unicode value as a variable in + corehq/apps/style/static/hqwebapp/less/font-commcare/variables.less. +

+

+ Add the :before styling for the class of the icon in + corehq/apps/style/static/hqwebapp/less/font-commcare/icons.less. +

+

+ Use your new icon! + <i class="fcc fcc-fd-signature"></i> +

+{% endblock content %} \ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/icon_set.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/icon_set.html new file mode 100644 index 000000000000..2cb7640e75ed --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/icon_set.html @@ -0,0 +1,15 @@ +{% for icon_set in icons %} +
+
+

+ {{ icon_set.name }} +

+ {% for icon in icon_set.icons %} +

+ + <i class="{{ prefix }} {{ icon }}"></i> +

+ {% endfor %} +
+
+{% endfor %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index a5876c58a891..5d56f3d93e6e 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -35,4 +35,6 @@ name="styleguide_atoms_typography_b5"), url(r'^b5/atoms/colors/$', bootstrap5.styleguide_atoms_colors, name="styleguide_atoms_colors_b5"), + url(r'^b5/atoms/icons/$', bootstrap5.styleguide_atoms_icons, + name="styleguide_atoms_icons_b5"), ] diff --git a/corehq/apps/styleguide/views/__init__.py b/corehq/apps/styleguide/views/__init__.py index 1f7b5297a514..cb86d34345b2 100644 --- a/corehq/apps/styleguide/views/__init__.py +++ b/corehq/apps/styleguide/views/__init__.py @@ -5,6 +5,10 @@ from django.utils.decorators import method_decorator from django.views.generic import * +from corehq.apps.styleguide.context import ( + get_common_icons, + get_custom_icons, +) from corehq.apps.styleguide.example_forms import ( BasicCrispyForm, CheckboxesForm, @@ -93,46 +97,8 @@ def sections(self): @property def page_context(self): return { - 'common_icons': [ - { - 'name': 'Common FontAwesome primary icons', - 'icons': [ - 'fa-plus', 'fa-regular fa-trash-can', 'fa-remove', 'fa-search', - 'fa-angle-double-right', 'fa-angle-double-down', - ], - }, - { - 'name': 'Common FontAwesome secondary icons', - 'icons': [ - 'fa-cloud-download', 'fa-cloud-upload', - 'fa-warning', 'fa-info-circle', 'fa-question-circle', 'fa-check', - 'fa-external-link', - ], - } - ], - 'custom_icons': [ - { - 'name': 'Custom HQ icons', - 'icons': [ - 'fcc-flower', 'fcc-applications', 'fcc-commtrack', 'fcc-reports', 'fcc-data', 'fcc-users', - 'fcc-settings', 'fcc-help', 'fcc-exchange', 'fcc-messaging', 'fcc-chart-report', - 'fcc-form-report', 'fcc-datatable-report', 'fcc-piegraph-report', 'fcc-survey', - 'fcc-casemgt', 'fcc-blankapp', 'fcc-globe', 'fcc-app-createform', 'fcc-app-updateform', - 'fcc-app-completeform', - ], - }, - { - 'name': 'Custom HQ icons specific to form builder', - 'icons': [ - 'fcc-fd-text', 'fcc-fd-numeric', 'fcc-fd-data', 'fcc-fd-variable', 'fcc-fd-single-select', - 'fcc-fd-single-circle', 'fcc-fd-multi-select', 'fcc-fd-multi-box', 'fcc-fd-decimal', - 'fcc-fd-long', 'fcc-fd-datetime', 'fcc-fd-audio-capture', 'fcc-fd-android-intent', - 'fcc-fd-signature', 'fcc-fd-multi-box', 'fcc-fd-single-circle', 'fcc-fd-hash', - 'fcc-fd-external-case', 'fcc-fd-external-case-data', 'fcc-fd-expand', 'fcc-fd-collapse', - 'fcc-fd-case-property', 'fcc-fd-edit-form', - ], - }, - ], + 'common_icons': get_common_icons(), + 'custom_icons': get_custom_icons(), 'swatches': { 'RED': { 'main': ('e73c27', 'cc-att-neg-mid'), diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 75bc229ad2ba..9d3a48b9c6f1 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -4,6 +4,8 @@ get_navigation_context, get_interaction_colors, get_neutral_colors, + get_common_icons, + get_custom_icons, ) @@ -28,3 +30,12 @@ def styleguide_atoms_colors(request): 'neutral': get_neutral_colors(), }) return render(request, 'styleguide/bootstrap5/atoms/colors.html', context) + + +def styleguide_atoms_icons(request): + context = get_navigation_context("styleguide_atoms_icons_b5") + context.update({ + 'common_icons': get_common_icons(), + 'custom_icons': get_custom_icons(), + }) + return render(request, 'styleguide/bootstrap5/atoms/icons.html', context) From ccbf07074555e777270d4f7abe68769fe80ea7fa Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Fri, 6 Oct 2023 16:57:03 +0000 Subject: [PATCH 08/67] move icon-related images out of bootstrap3 specific images and into normal images folder in styleguide. update references --- .../font_docs/font_squirrel_settings.jpg | Bin .../images/font_docs/glyphs_character.png | Bin .../images/font_docs/glyphs_compare.png | Bin .../images/font_docs/glyphs_overview.png | Bin .../images/font_docs/vector_version.png | Bin .../bootstrap3/_includes/atoms/icons.html | 18 +++++++++--------- .../styleguide/bootstrap5/atoms/icons.html | 10 +++++----- 7 files changed, 14 insertions(+), 14 deletions(-) rename corehq/apps/styleguide/static/styleguide/{bootstrap3 => }/images/font_docs/font_squirrel_settings.jpg (100%) rename corehq/apps/styleguide/static/styleguide/{bootstrap3 => }/images/font_docs/glyphs_character.png (100%) rename corehq/apps/styleguide/static/styleguide/{bootstrap3 => }/images/font_docs/glyphs_compare.png (100%) rename corehq/apps/styleguide/static/styleguide/{bootstrap3 => }/images/font_docs/glyphs_overview.png (100%) rename corehq/apps/styleguide/static/styleguide/{bootstrap3 => }/images/font_docs/vector_version.png (100%) diff --git a/corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/font_squirrel_settings.jpg b/corehq/apps/styleguide/static/styleguide/images/font_docs/font_squirrel_settings.jpg similarity index 100% rename from corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/font_squirrel_settings.jpg rename to corehq/apps/styleguide/static/styleguide/images/font_docs/font_squirrel_settings.jpg diff --git a/corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/glyphs_character.png b/corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_character.png similarity index 100% rename from corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/glyphs_character.png rename to corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_character.png diff --git a/corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/glyphs_compare.png b/corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_compare.png similarity index 100% rename from corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/glyphs_compare.png rename to corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_compare.png diff --git a/corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/glyphs_overview.png b/corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_overview.png similarity index 100% rename from corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/glyphs_overview.png rename to corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_overview.png diff --git a/corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/vector_version.png b/corehq/apps/styleguide/static/styleguide/images/font_docs/vector_version.png similarity index 100% rename from corehq/apps/styleguide/static/styleguide/bootstrap3/images/font_docs/vector_version.png rename to corehq/apps/styleguide/static/styleguide/images/font_docs/vector_version.png diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html index 45bb2c62bff1..b9ff561316de 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html @@ -57,8 +57,8 @@

New Icons

- + href="{% static 'styleguide/images/font_docs/vector_version.png' %}"> +

Edit the icon in a vector graphics program first

@@ -69,8 +69,8 @@

Edit the icon in a vector graphics program first

- + href="{% static 'styleguide/images/font_docs/glyphs_overview.png' %}"> +

Create a new private domain glyph in the CommCare HQ Font

@@ -84,8 +84,8 @@

Create a new private domain glyph in the CommCare HQ F

- + href="{% static 'styleguide/images/font_docs/glyphs_character.png' %}"> +

Edit the New Glyph

@@ -97,8 +97,8 @@

Edit the New Glyph

- + href="{% static 'styleguide/images/font_docs/glyphs_compare.png' %}"> +

Check the Glyph's Scale and Width

@@ -137,7 +137,7 @@

Prepping the Font for Cross Browser Compatibility

Expert Mode:

@@ -75,153 +78,300 @@

Creating New Icons

- If a suitable icon doesn't exist in FontAwesome or HQ's custom set, - another great resource for icons is the - Noun Project. - Typically, once a Noun Project icon is chosen, - it is best practice to add that icon as a glyph in the CommCare HQ font. + If a suitable icon doesn't exist in FontAwesome or HQ's custom set, it might be necessary to create one and add it + to our custom set of icons.

- On a Mac, the best program to edit this font is - Glyphs. You should open the - CommCareHQFont.glyphs file in Glyphs and add your fonts to an available - private unicode space. + The instructions below assume you have a Mac. If you are running a different operating system, consider reaching out + to someone with a Mac to help you—unless you are adventurous and want to add to this documentation. If you + are not comfortable with vector graphics, please reach out to someone who is.

+ +

+ Creating an Icon +

+

+ Before you modify the CommCare HQ font, you first need to make sure you have a vector icon ready to copy-paste the + vector data into the Glyphs file. +

+ You can create a new icon from scratch, or you can start from an existing vector icon, like the ones found in + The Noun Project. +

+

+ You can open vector files (ie .svg, .eps, .ai) in either Adobe Illustrator, + Inkscape, or similar vector graphics editor. Once open, edit the graphic as necessary to make the icon fit the + style of the other icons available to the CommCare HQ Font. +

+

+ When you have finished preparing the icon, ensure that you keep the file open while you follow the next steps to + add a new glyph to the CommCare HQ font. +

+ +

+ Adding a New Glyph +

+

- Glyphs has a great article on - creating an icon webfont. - If you are adding a new glyph, this is a must-read. Below are some - highlights of the process. + First, open + CommCareHQFont.glyphs + in Glyphs Mini. Glyphs Mini is a less expensive, reduced + version of Glyphs you can find in the App Store.

+ +
+ Note: If you don't already have Glyphs Mini and someone else on the team does, reach out to them for help + with the following steps. Glyphs / Glyphs Mini are not free apps, and this process hasn't been successfully tested + in any of the free font editing apps. +
+ +

+ If you scroll down in the window, you will see a section of glyphs called "Private Use". This is where we will + want the new icon/glyph to eventually live. +

+
-
+
+ +
+
+ +

+ The fastest way to add a new glyph is to select the last glyph in the list and go to Glyph > Duplicate + in the menu. +

+ +
+
-
- +
+
-
-

Edit the icon in a vector graphics program first

-

- Open the svg or eps file in either Adobe Illustrator or Inkscape and - make any fine edits necessary to make the icon fit the style of - the rest of the icons available to the CommCare HQ Font. -

+
+
-
-
+ +

+ Next, you can double-click to open the duplicated glyph. From here, rename the glyph to a memorable slug to describe + the glyph (it's helpful if you use the same name when adding it to HQ). After that you can select and delete the old + vector data from the duplicated glyph. From there, you can paste the new vector information for the new glyph (from an + opened SVG or other vector image file), and resize to fit. +

+ +
+
-
- +
+

Rename

+ + +
-
-

Create a new private domain glyph in the CommCare HQ Font

-

- Open CommCareHQFont.glyphs - in Glyph.app and follow the steps in the - tutorial - to add a new glyph in the private domain. Make sure the unicode - address you've chosen does not overlap with any existing glyphs or - public domain characters. -

+
+

Delete Old

+ + + +
+
+

Paste, Resize New

+ + +
-
-
+ +

+ Then, you can resize the canvas of the new glyph to fit the new vector image. It's a good idea to use other + similarly shaped glyphs in the font as a sizing reference. Then you can horizontally position the glyph as + seen in the gif below. Note that the number being entered in to center the glyph is half the value of the + width of the glyph canvas. +

+ +
+
-
- +
+

Resize Canvas

+ + +
-
-

Edit the New Glyph

-

- Copy your vector graphic into the Glyphs glyph editor. Resize as necessary - so that the glyph is large enough to fit in with the rest of the HQ fonts. - Make sure that the L and R values in the glyph info - are never negative (ideally they are both 0). -

+
+

Center Horizontally

+ + +
-
-
+ +

+ Finally, vertically center the font as shown below. Again, now is a good time to reference values set for other + similarly shaped and sized glyphs. +

+ +
+
+

Center Vertically

+ + + +
+
+ +

+ When you are done editing the glyph and return to the main window, you will now see your new icon created. + However, it is now appearing in the "Other" section rather than "Private Use". This is because you need to set the + unicode value for this new glyph. Setting the unicode value is also very important so that we can reference + it in the font stylesheet later. +

+ +
+
+ + + +
+
+ +

+ Unfortunately, Glyphs Mini doesn't let you edit the unicode value for a glyph directly (you need the more expensive + full version for this). However, there is a workaround. If you close Glyphs Mini and open the .glyphs + file in a text editor you can add the unicode value after the new glyph definition. +

+ +

+ First, find the glyph right before your new glyph, and copy the line with the unicode value, then paste it at the end + of the new glyph definition and increment the hexadecimal value by one. Finally, add the slug for the new glyph in + the list of glyphs. The images below illustrate each step, but you can also view this + example commit + as a template for how your changes should look. +

+ +
+
-
- +
+

Copy Previous

+ + + +
+
+

Paste & Increment

+ + +
-
-

Check the Glyph's Scale and Width

-

- A good way of checking whether your new glyph is sized properly - is to look at it in the Glyphs overview pane and compare it to the - existing glyphs in the font. Make sure that the baseline (bottom of the - glyph) looks natural and that the scale and height of glyph fit with - the rest of the glyphs in the font. -

+
+

Add to List

+ + +
-

- Saving the Edited Glyphs File -

+

- Once you've added your new glyph, you will need to export your font - to *.otf. Check Use Production glyph names and - Remove Overlap. + When you are done editing the .glyphs file directly, you can open it again in Glyphs Mini. The new + icon should now appear at the end of the "Private Use" list. You can also double-click to view the new glyph + and verify that the new unicode value is shown next to the name/slug.

+ +
+
+
+
+

Final List

+ + + +
+
+

Verify Unicode

+ + + +
+
+
+
+ +

+ Saving the Edited Glyphs File +

+

- Update: Remove Overlap caused the bottom half of the - CommCare flower to be removed. Un-checking that setting seemed to - generate better results. YMMV + After the new glyph is properly added to + CommCareHQFont.glyphs, + it must be exported as an Open Type (.otf) font file.

+

- Save the final *.otf font to + The image below shows the settings in Glyphs Mini after going to File > Export. Save the final *.otf font to corehq/apps/hqwebapp/static/hqwebapp/font/CommCareHQFont-Regular.otf.

-

+ +
+
+ + + +
+
+ +

Prepping for Cross Browser Compatibility

To make the font universally readable across most browsers, you'll need to have an eot, svg, ttf, and woff version of it. Use the - Font Squirrel Webfont Generator + Font Squirrel Webfont Generator to do this.

- Here are some screenshots of settings for the font generator in - Expert Mode: -

-

- settings
- NOTE: unlike in this settings image, select No Subsetting. - Otherwise the private use glyphs will be removed - (source). + You will need to use the generator in "Expert Mode" with the following settings:

-

- Copy the resulting eot, svg, ttf, - and woff files to corehq/apps/style/static/style/font/ - when you are done. -

-

+
+
+

+ Click to enlarge this image: +

+ + + +
+
+ +

Adding the New Glyph to the Stylesheet

- Add a reference to the icon's font unicode value as a variable in + First, add a reference to the icon's font unicode value as a variable in corehq/apps/style/static/hqwebapp/less/font-commcare/variables.less.

- Add the :before styling for the class of the icon in + Then, add the :before styling for the class of the icon in corehq/apps/style/static/hqwebapp/less/font-commcare/icons.less.

- Use your new icon! - <i class="fcc fcc-fd-signature"></i> + Update the list of icons in this document to show the new icon. +

+ +

+ Example Commit +

+ +

+ Here is an example + of what a commit would look like when adding a new icon to our CommCare HQ font.

{% endblock content %} \ No newline at end of file From 8c4d628a06055ce4e3a961bae89f91ebcf71871c Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 25 Oct 2023 19:16:14 +0200 Subject: [PATCH 12/67] remove old icon creation process from bootstrap 3 styleguide and point to new process --- .../font_docs/font_squirrel_settings.jpg | Bin 302336 -> 0 bytes .../images/font_docs/glyphs_character.png | Bin 61785 -> 0 bytes .../images/font_docs/glyphs_compare.png | Bin 66628 -> 0 bytes .../images/font_docs/glyphs_overview.png | Bin 38369 -> 0 bytes .../images/font_docs/vector_version.png | Bin 21774 -> 0 bytes .../bootstrap3/_includes/atoms/icons.html | 129 +----------------- 6 files changed, 5 insertions(+), 124 deletions(-) delete mode 100644 corehq/apps/styleguide/static/styleguide/images/font_docs/font_squirrel_settings.jpg delete mode 100644 corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_character.png delete mode 100644 corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_compare.png delete mode 100644 corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_overview.png delete mode 100644 corehq/apps/styleguide/static/styleguide/images/font_docs/vector_version.png diff --git a/corehq/apps/styleguide/static/styleguide/images/font_docs/font_squirrel_settings.jpg b/corehq/apps/styleguide/static/styleguide/images/font_docs/font_squirrel_settings.jpg deleted file mode 100644 index d2d7d0f35ea75e40bd6dd01bb5231ddce53a4a4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302336 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

kDI}t{nE3eAG871wDvMmaP(dkeQ_dpA!pMX_uiT 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

)#DStzR^LnDj4cFxpofv%mU4AV#jww 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%0D0=keR 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�zihB zEuO6@3=Xa=LU21I&K%5xnxvIUuf~0`J3(@SqdLdK3M;9`7+Mjvl@ZuQtk>74MP=2onKR)uRAt7&h1ew4Cm>wWGnSG&rK{b3DG;$GWH z6rV=HciQ3*uF!aRP&8rdOX3>sl3m{X9bwn(k>3Z(M0$fQ3=$*DT34L$c_d8Ou_wTk zFT4DeD5E4x?%IeVcCfhy=DA%uqKIJI3^EiJcQ@_TMnbrb#*QpI(pbIBL|!&&v)U7s zr!n2M;qMK!q5hJZ}#)rC~K$;miR>qkDdNh@~u?wH)m4wT~3 zE2P@y+Nr7<>4Ep%9h48T--p_o2pA7-RO4iY+W@#&7S%8}%(+@&oieijCCzQ! zQE5QvTud-kdS(s7MQ4@3(+QJs{N3xGURt(oSG_!jytX!m@>sRrgHCdTP`zmb$=!9; zF#3LaO}ET58c1V#{_*9^PtFdkZ{W!=YwcwI6D<0KonmK(aO?VprW74{T&zP?$h13cQgM%<0Tgty=GkBK{rHRa%dXue*=^~ zeJvB*__vFIG03)Guvfjcx%p8pW)m3)!Z#n1nlkSZww}I_F7N2Jg>6N#lC2 zZ2iGAcl%dqmyGQ%;$Gd0A8trpwltT70!b$NlB8J-vrh55>y!)?3M@q!0Ui7Hqp(1h zEzFe>TW^z4i+f8^e5vR7b>4=;AQ+L`V_YLTHW|iJeF-DgD?ImpUn@l?M`@TOOdRTK zaqW_8o*~u7RE`(sx6@q&kBFzWH(A3Goq`Bu6*rAt$$FAMXpP%+b|g-t9$TZyO@m1m;k* zP#JnBWp%$#Pj%b@LN3}#LqxX}vc|QvMDn~=R8ltt^W}hUy*>EIBPf^A7uu8`O3e&~ zH1P_e4Zm?H5@_WtOIj4zOMB0r9$)W7o+Az-nOjK$czf?lMSt=Q>Y+U}obwu==;QB> z1RW7TQ1WL57xMPcjz`7}kb)6f(Ip|WO?X6x5GkkLa?q#^j5MorkEQ73s|~>7Fy{(U zfQQs<=9%M^CG#bcf}d~^d0=XDg3EpJBp#a^qMje1HzKzk<|lOt)`U!YR+;F zx&mdsbi7+6BQOk~8algC+nCky;uxUS(oQ3L&eqnmU%n?+Bz6!dw>S1c8-*eXpjF~g z9m{Y6;oCOUL^|;EBwa`FvWvoGDB^35ckA}KAtdNCJFyvuvF@MbpDH%b#t%fyd+1j9 z(bi+%d4^(EFb=&OX6*T9wWDT-5B$Pfczceu;P93-sJi@2=J6djBSX3`0TmK^^;h1{ zG=5^m1GwWovqYyP29VwPRdV=Cgi!)rnL=q>22Lk*K17BmQks!CMf~nnD4X1=K{{FT zBQ|5e(eN++2PY4s#yejh2EQ*D^#UFBgiNY*M+@ z>;3Y*MRIM?REry3q`x=<_>5C4)30pu14w6kywXTqBiSU1x%osjfQ!j%;oy|R$63b6 zFW~uEPkzdTyVd2}l9do#0#&bAVMI*HJ%~}wP}?hFkq)|3=hZ&m!)e0r&!K2NQe(DT zz?8<*B*2psz#bC|5Oy}L42!l>;S>3m2RC2Hn$jjquO)RtA$X{BFa`z5VI zTqk&JoD)Bw51@Te=i|@$P;ell+aRFIJD*r*Fd~?VTW$lc;blE!As{BM$RYtDn#D2G zX78bNW>$M;r$s&ZQ)fwS*mZ)Ej%|g3cl++Pj%)FRoeB+@{{tu6cK2cchl0fRE&$rz zkp;|Rb=W3}m{U%t8>v0DI62FVFF`c#q8e3roJG3z_05j)X#T7{bH$jd^nA-X zTnge_))cu>p8Any&ako{*eJAox7u#VM)dmI7tx)`iu`58oH^biwJ=sfmS|sJMs3?& zWZC;H^V};y5ddNT5V<#d)6-i3Y@J>F~rhHsl+D_PO0Tqd-haMXwqKwfL0--PY($mSo-=p&OUF0*!mxJu= zN81c>Z<=`X5ye?xL|A|X1-*Hc$t0IW_h2`(-em>mIV&TmD&K#9QA^p3f< ?MMp zPD8opDbpk2ovgJYs-Ga+FP?F`IB+v6FLLaj)z z(JwxteUuE~<8QAdqvV^uYdc)wP1;xJ+_$5&@L9lkv(K_^(s3AASW~_NW+cUF699U2 zmq#|i;5)ER)h@C90<|`jp?Ux?=t2-`kUKyl;g&@Z5Aa;!Tg`h>8T;(gDqop1>~5|p zYFZY=?ZlimK9Y?O5-eJM1I}Y!o1{zM40VO1t&WTm>~3&zj6{@Ze7OVK5}Z$4@H!T= zKBV@Co~*TdbeB6x13kicVhu1;H&X~02V6Zx*9Ir3>dU)hWbYt_;e4?d@3pabSz8z- zLn(=n%8=WFS%=y4jrRyi#4UwfE!%S~Db5x?0cVC?XiqHAP|Ywm!NQeDEOXL#k*G@d z92X=W3J#iq9v;w6UE_Y$@~W+^AvUmErFu*Jw^pLcfn1|mV$g*9Bzg)8VufnZ$Vr%a z^RzkNAUwV;TEJvjV?O7J9*CcQt`wb}1vPhd>9g$}E+jwAJr(&8CU>*F4S~{^AGp|>&JzDuvB!)stXWoVKP7o zy+RCOBYH5K0uz*rR>__HTh)hgy80E>4@NRP9n{{rG>?RLy34o>o0qXhY{~8Pxopus zi(frC_`+T?GxjRcoQ?Trdw2ts9N7^mP z=6>ASIh*X;KD8_|`N&epR{_xcNZarimd`&Y|7$_!E+)o7#|WY%Xdk8M$FtY3onRAI z=2PI>s2MXRE{5_wE^LQ6p32Uyk4Ju!z5CDKkV4=jXnmu5ShAc~!gs^r1hs4VcK*HpJAxg;oHQqt6rXa@Xyi z5;bV&OU`pIe%C-TM+H|rE~7ag&C!0(Tj{X%TC;Iu?AsL&{FyKFzX$$%dH%gA{>=*i zmK6V%kNPotOBVl^TC%>i_R!|BD)b<&U}l1Gg5Z AhyVZp diff --git a/corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_character.png b/corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_character.png deleted file mode 100644 index 1b28605bf21f40ba760378cae5b520a23f38f1b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61785 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

D}3gv+V%V!d0Ki}(>pfg#Yu-U7)6j;Dc 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

K*(RS(;sI0*7C;@< zBMm~f0##F;vC&Z{HuD(K(>WL>J_V6SfvBulUT301{c~U=5F7(oQ*aMlG8cow)=Wf7 zIyF4Jw7mQaFiCD+9{#B6g;P+x_2}-gR1%Op_1)i(=eeu};1K4Ffr;MIdgXdlF1u7x zyYQq|!S`k?{f4*B0LhJxj?Q1J(3pr#VX%n}9QNKBe8zit9tl}nUkBI~BeeWBQ#~Cx zFz`oFeVln9LYz`v3r~o#Otio$Ag7#qm1>! z$BVHV!xpL!c$CvX;9TQ0kS81rR?@pX1zf?k8o32fZds!sr;`BP1)zDLRA5uX046^w zsF;WvgGC~UOH#t+6Huc?dV4R9Mc41NaZx=-=*7GX5P9rY@55NFh5^iHTr^HA;`hWE zUlOSzV`F8m=K$7bHE%`ZsbK;Bs;n^}!qkR9CRv_Bfh`vFAK_j)TzVkkFf1^@j!or% z-oubS3|7K;Z~9YgY*jE{>gwvLGUL2NSL^_@L4**#*csJ5Jpe`u9PExW6`j{3 z89`J_&j9nzcPDOzus|~k=7GuQ0?@|-=>$mPEA%*~d~&vTg3b$~hXv%{qC$}mU_fSC zZbv{sz?!#Fru8rZ;97yx9u^gJXq`A3;{y4>=_q%QpPye0y|SCyJBo_Yi(nwv>V^um zL0)J=3fPAB&exeifK@3R&4yxnadA;S#P|QTQEY2$XSZZ$1cnQ&UR2(Ir^*r_AVRy_ jR6<>tfad@8=`Frqipz%=UkRR}0DtnbDl(-~Chz_Sy?Iqz diff --git a/corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_compare.png b/corehq/apps/styleguide/static/styleguide/images/font_docs/glyphs_compare.png deleted file mode 100644 index b21b4ff46e55f5c10866594fd28cfa108fc3aa70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66628 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 diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html index b9ff561316de..a1cb6c016936 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html @@ -35,130 +35,11 @@

Primary vs Secondary Icons

{% include 'styleguide/bootstrap3/_includes/atoms/icons/panel.html' with prefix="fa" icons=common_icons %} {% include 'styleguide/bootstrap3/_includes/atoms/icons/panel.html' with prefix="fcc" icons=custom_icons %} -

New Icons

+

Creating New Icons

- If a suitable icon doesn't exist in FontAwesome or HQ's custom set, - another great resource for icons is the - Noun Project. - Typically, once a Noun Project icon is chosen, - it is best practice to add that icon as a glyph in the CommCare HQ font. -

-

- On a Mac, the best program to edit this font is - Glyphs. You should open the - CommCareHQFont.glyphs file in Glyphs and add your fonts to an available - private unicode space. -

-

- Glyphs has a great article on - creating an icon webfont. - If you are adding a new glyph, this is a must read. Below are some - highlights of the process. -

-
- - - -
-

Edit the icon in a vector graphics program first

- Open the svg or eps file in either Adobe Illustrator or Inkscape and - make any fine edits necessary to make the icon fit the style of - the rest of the icons available to the CommCare HQ Font. -
-
-
- - - -
-

Create a new private domain glyph in the CommCare HQ Font

- Open corehq/apps/hqwebapp/_fonts/commcarehq_font/CommCareHQFont.glyphs - in Glyph.app and follow the steps in the - tutorial - to add a new glyph in the private domain. Make sure the unicode - address you've chosen does not overlap with any existing glyphs or - public domain characters. -
-
-
- - - -
-

Edit the New Glyph

- Copy your vector graphic into the Glyphs glyph editor. Resize as necessary - so that the glyph is large enough to fit in with the rest of the HQ fonts. - Make sure that the L and R values in the glyph info - are never negative (ideally they are both 0). -
-
-
- - - -
-

Check the Glyph's Scale and Width

- A good way of checking whether your new glyph is sized properly - is to look at it in the Glyphs overview pane and compare it to the - existing glyphs in the font. Make sure that the baseline (bottom of the - glyph) looks natural and that the scale and height of glyph fit with - the rest of the glyphs in the font. -
-
-

Saving the Edited Glyphs File

-

- Once you've added your new glyph, you will need to export your font - to *.otf. Check Use Production glyph names and - Remove Overlap. -

-

- Update: Remove Overlap caused the bottom half of the - CommCare flower to be removed. Un-checking that setting seemed to - generate better results. YMMV -

-

- Save the final *.otf font to - corehq/apps/hqwebapp/static/hqwebapp/font/CommCareHQFont-Regular.otf. -

-

Prepping the Font for Cross Browser Compatibility

-

- To make the font universally readable across most browsers, you'll need - to have an eot, svg, ttf, - and woff version of it. Use the - Font Squirrel Webfont Generator - to do this. -

-

- Here are some screenshots of settings for the font generator in - Expert Mode: -

-
    -
  • Settings
    - NOTE: unlike in this settings image, select No Subsetting. - Otherwise the private use glyphs will be removed - (source). -
  • -
-

- Copy the resulting eot, svg, ttf, - and woff files to corehq/apps/style/static/style/font/ - when you are done. -

-

Adding the New Glyph to the Stylesheet

-

- Add a reference to the icon's font unicode value as a variable in - corehq/apps/style/static/hqwebapp/less/font-commcare/variables.less. -

-

- Add the :before styling for the class of the icon in - corehq/apps/style/static/hqwebapp/less/font-commcare/icons.less. -

-

- Use your new icon! - <i class="fcc fcc-fd-signature"></i> + The + process for creating a new icon + has been updated and can be found in the Bootstrap 5 styleguide, + as the process is the same for both Bootstrap 3 and Bootstrap 5.

From 78757bbff0a0cb9e864c6203af6ddebfa1b977f9 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 25 Oct 2023 21:48:50 +0200 Subject: [PATCH 13/67] add buttons in molecules section --- corehq/apps/styleguide/context.py | 6 + .../bootstrap5/molecules/buttons.html | 158 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 5 + 4 files changed, 171 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/buttons.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 586f95ec573b..6741d9c2b2b7 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -26,6 +26,12 @@ def get_navigation_context(current_page): Page("Icons", 'styleguide_atoms_icons_b5'), ], ), + NavigationGroup( + name="Molecules", + pages=[ + Page("Buttons", 'styleguide_molecules_buttons_b5'), + ], + ), ], } diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/buttons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/buttons.html new file mode 100644 index 000000000000..6454d1ebaba3 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/buttons.html @@ -0,0 +1,158 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

Buttons

+

+ Figuring out where the "right" button is can be frustrating when + there are too many options. Let's demystify that. +

+{% endblock intro %} + +{% block toc %} +
On this page
+
+ +{% endblock toc %} + +{% block content %} +

+ Overview +

+

+ Having clear guidance for what the next actions are on a page is important to reducing decision fatigue. One + huge component of this comes from button styling and organization. +

+

+ Most Buttons +

+

+ Most buttons should use the btn-outline-primary class. This class uses the "Call to Action" color + described in the guide on colors. +

+ +
+
+ +
+
+
HTML
+
<button type="button" class="btn btn-outline-primary">
+    Most Buttons
+</button>
+
+
+
+
+ +

+ Primary Action Buttons +

+

+ Buttons that denote the primary (or main) action of a page should use the btn-primary class. +

+ +
+
+ +
+
+
HTML
+
<button type="button" class="btn btn-primary">
+    Primary Action
+</button>
+
+
+
+
+ +

+ Most pages have a single primary action—often save, download, or add—and may have multiple secondary or + tertiary buttons. The names are to suggest what level of importance the button has to the user. +

+
+ Note: If you have a row of buttons (4+), please reconsider the design. +
+ +

+ Download / Upload Buttons +

+

+ Usually a common secondary action on a page will be a direction to download or upload data to HQ. In this case, + the btn-info class should be used. +

+ +
+
+ +
+
+
HTML
+
<button type="button" class="btn btn-info">
+    Download / Upload
+</button>
+
+
+
+
+ +
+ Note: There are some places in HQ, such as formdesigner, where the primary action on the page, Save, + uses a btn-info style to create contrast on a dark blue background. However, consider that the rule + of only using this button for Download / Upload actions should not be broken for any new feature development. +
+ +

+ Destructive Action Buttons +

+

+ For buttons which correspond to a destructive action—like Delete—the + btn-outline-danger class should be used. We typically like to keep one destructive action button + per group of buttons / row or per page. +

+ +
+
+ +
+
+
HTML
+
<button type="button" class="btn btn-outline-danger">
+    Delete
+</button>
+
+
+
+
+ +

+ Other Buttons +

+

+ If you are familiar with Bootstrap 5's button documentation, + you know that there are far more button styles available. Please note that while there are a variety of options available, + we purposely don't list them here because we want to keep our standard button choices limited so that there is + less confusion—both for the developer and the user—when it comes to using buttons consistently in HQ + and what to expect from those buttons. +

+ +

+ Signup & Login +

+

+ The signup and login pages also deviate a bit from button choices by using a purple styled button. This stylistic + choice is used to create a better transition between dimagi.com and commcarehq.org. +

+{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index 88541b6ed2c7..c4db5828dc4c 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -39,4 +39,6 @@ name="styleguide_atoms_colors_b5"), url(r'^b5/atoms/icons/$', bootstrap5.styleguide_atoms_icons, name="styleguide_atoms_icons_b5"), + url(r'^b5/molecules/buttons/$', bootstrap5.styleguide_molecules_buttons, + name="styleguide_molecules_buttons_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 06339c67907c..feedfb9df665 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -44,3 +44,8 @@ def styleguide_atoms_icons(request): 'custom_icons': get_custom_icons(), }) return render(request, 'styleguide/bootstrap5/atoms/icons.html', context) + + +def styleguide_molecules_buttons(request): + return render(request, 'styleguide/bootstrap5/molecules/buttons.html', + get_navigation_context("styleguide_molecules_buttons_b5")) From 3559ebd00cf1811c91e6e903facb093e98bb609d Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 25 Oct 2023 21:49:02 +0200 Subject: [PATCH 14/67] change alert class --- .../styleguide/templates/styleguide/bootstrap5/atoms/icons.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html index ce374a8f12a4..e593152383b6 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html @@ -118,7 +118,7 @@

version of Glyphs you can find in the App Store.

-
+
Note: If you don't already have Glyphs Mini and someone else on the team does, reach out to them for help with the following steps. Glyphs / Glyphs Mini are not free apps, and this process hasn't been successfully tested in any of the free font editing apps. From 4b4fcc5baa46430dbc19a533a6efe58ecbe46e15 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 26 Oct 2023 20:24:39 +0200 Subject: [PATCH 15/67] make code examples more standardized and easier to work with --- corehq/apps/styleguide/context.py | 7 +++ .../styleguide/bootstrap5/code_example.html | 11 ++++ .../examples/destructive_action_buttons.html | 3 + .../examples/download_upload_buttons.html | 3 + .../bootstrap5/examples/most_buttons.html | 3 + .../examples/primary_action_buttons.html | 3 + .../bootstrap5/molecules/buttons.html | 56 ++----------------- corehq/apps/styleguide/views/bootstrap5.py | 16 +++++- 8 files changed, 48 insertions(+), 54 deletions(-) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/code_example.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/destructive_action_buttons.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/download_upload_buttons.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/most_buttons.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/primary_action_buttons.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 6741d9c2b2b7..0fd193c893ee 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -1,3 +1,4 @@ +import os from collections import namedtuple NavigationGroup = namedtuple('NavigationGroup', 'name pages') @@ -137,3 +138,9 @@ def get_custom_icons(): ], }, ] + + +def get_example_context(filename): + examples = os.path.join(os.path.dirname(__file__), 'templates') + with open(os.path.join(examples, filename), 'r', encoding='utf-8') as content: + return content.read() diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_example.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_example.html new file mode 100644 index 000000000000..8e95eba183b9 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_example.html @@ -0,0 +1,11 @@ +
+
+ {{ content|safe }} +
+
+
HTML
+
{{ content }}
+
+
+
+
diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/destructive_action_buttons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/destructive_action_buttons.html new file mode 100644 index 000000000000..d277b86f9ab6 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/destructive_action_buttons.html @@ -0,0 +1,3 @@ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/download_upload_buttons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/download_upload_buttons.html new file mode 100644 index 000000000000..a7faef08412b --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/download_upload_buttons.html @@ -0,0 +1,3 @@ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/most_buttons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/most_buttons.html new file mode 100644 index 000000000000..318b83a2e07c --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/most_buttons.html @@ -0,0 +1,3 @@ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/primary_action_buttons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/primary_action_buttons.html new file mode 100644 index 000000000000..0a5caedc20d4 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/primary_action_buttons.html @@ -0,0 +1,3 @@ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/buttons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/buttons.html index 6454d1ebaba3..f9987ccbc1d7 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/buttons.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/buttons.html @@ -43,19 +43,7 @@

described in the guide on colors.

-
-
- -
-
-
HTML
-
<button type="button" class="btn btn-outline-primary">
-    Most Buttons
-</button>
-
-
-
-
+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.most_buttons %}

Primary Action Buttons @@ -64,19 +52,7 @@

Buttons that denote the primary (or main) action of a page should use the btn-primary class.

-
-
- -
-
-
HTML
-
<button type="button" class="btn btn-primary">
-    Primary Action
-</button>
-
-
-
-
+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.primary_action_buttons %}

Most pages have a single primary action—often save, download, or add—and may have multiple secondary or @@ -94,19 +70,7 @@

the btn-info class should be used.

-
-
- -
-
-
HTML
-
<button type="button" class="btn btn-info">
-    Download / Upload
-</button>
-
-
-
-
+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.download_upload_buttons %}
Note: There are some places in HQ, such as formdesigner, where the primary action on the page, Save, @@ -123,19 +87,7 @@

per group of buttons / row or per page.

-
-
- -
-
-
HTML
-
<button type="button" class="btn btn-outline-danger">
-    Delete
-</button>
-
-
-
-
+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.destructive_action_buttons %}

Other Buttons diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index feedfb9df665..af3d47b29ad1 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -6,6 +6,7 @@ get_neutral_colors, get_common_icons, get_custom_icons, + get_example_context, ) @@ -47,5 +48,16 @@ def styleguide_atoms_icons(request): def styleguide_molecules_buttons(request): - return render(request, 'styleguide/bootstrap5/molecules/buttons.html', - get_navigation_context("styleguide_molecules_buttons_b5")) + context = get_navigation_context("styleguide_molecules_buttons_b5") + context.update({ + 'examples': { + 'most_buttons': get_example_context('styleguide/bootstrap5/examples/most_buttons.html'), + 'primary_action_buttons': get_example_context( + 'styleguide/bootstrap5/examples/primary_action_buttons.html'), + 'download_upload_buttons': get_example_context( + 'styleguide/bootstrap5/examples/download_upload_buttons.html'), + 'destructive_action_buttons': get_example_context( + 'styleguide/bootstrap5/examples/destructive_action_buttons.html'), + } + }) + return render(request, 'styleguide/bootstrap5/molecules/buttons.html', context) From 76917559a9c3227f84495ec185fdfc7cdc410671 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 26 Oct 2023 20:28:29 +0200 Subject: [PATCH 16/67] add selections section to molecules --- .../static/hqwebapp/scss/styleguide.scss | 7 + corehq/apps/styleguide/context.py | 1 + .../templates/styleguide/bootstrap5/base.html | 10 + .../bootstrap5/examples/multiselect.html | 24 ++ .../examples/select2_css_class.html | 5 + .../examples/select2_css_class_multiple.html | 5 + .../examples/select2_ko_autocomplete.html | 25 ++ .../examples/select2_ko_dynamic.html | 15 ++ .../examples/select2_ko_static.html | 14 ++ .../bootstrap5/examples/select2_manual.html | 11 + .../bootstrap5/examples/toggles.html | 2 + .../bootstrap5/molecules/selections.html | 229 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 19 ++ 14 files changed, 369 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/multiselect.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_css_class.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_css_class_multiple.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_autocomplete.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_dynamic.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_static.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_manual.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/toggles.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html diff --git a/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss b/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss index 82ce8f28d2bd..8cef4f140893 100644 --- a/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss +++ b/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss @@ -119,3 +119,10 @@ background-color: $cc-brand-hi; } } + +code { + color: $purple; + background: none; + border: none; + font-weight: bold; +} diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 0fd193c893ee..b3d093f1ad59 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -31,6 +31,7 @@ def get_navigation_context(current_page): name="Molecules", pages=[ Page("Buttons", 'styleguide_molecules_buttons_b5'), + Page("Selections", 'styleguide_molecules_selections_b5'), ], ), ], diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html index 991de8e2fabd..187334bb8c70 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html @@ -88,5 +88,15 @@
Quick Links
{% include 'hqwebapp/partials/bootstrap5/ko_select_toggle.html' %} {% include 'hqwebapp/partials/bootstrap5/ko_feedback.html' %} + {% compress js %} + + + + + + + + {% endcompress %} + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/multiselect.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/multiselect.html new file mode 100644 index 000000000000..0ad2bc1a8f0b --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/multiselect.html @@ -0,0 +1,24 @@ + + + \ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_css_class.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_css_class.html new file mode 100644 index 000000000000..a06b25f344e9 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_css_class.html @@ -0,0 +1,5 @@ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_css_class_multiple.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_css_class_multiple.html new file mode 100644 index 000000000000..104d0f5ab73a --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_css_class_multiple.html @@ -0,0 +1,5 @@ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_autocomplete.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_autocomplete.html new file mode 100644 index 000000000000..c4512805d3f1 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_autocomplete.html @@ -0,0 +1,25 @@ +
+ +
+ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_dynamic.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_dynamic.html new file mode 100644 index 000000000000..2b4b0348442c --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_dynamic.html @@ -0,0 +1,15 @@ +
+ +
+ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_static.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_static.html new file mode 100644 index 000000000000..25bfd2fb4ead --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_ko_static.html @@ -0,0 +1,14 @@ +
+ +
+ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_manual.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_manual.html new file mode 100644 index 000000000000..9f7954e949bd --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/select2_manual.html @@ -0,0 +1,11 @@ + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/toggles.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/toggles.html new file mode 100644 index 000000000000..300d65e88a0c --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/toggles.html @@ -0,0 +1,2 @@ + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html new file mode 100644 index 000000000000..beb2ac19b37a --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html @@ -0,0 +1,229 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

Selections

+

+ HQ has different interactions for selecting data from a list. +

+{% endblock intro %} + +{% block toc %} +
On this page
+
+ +{% endblock toc %} + +{% block content %} +

+ Overview +

+

+ A good rule of thumb when deciding what selection component to use is the following: +

+
    +
  • Select-Toggles are good for selecting between a small list of items (2-5 items).
  • +
  • Select2s are good for selective from a very large set of items, as it supports pagination.
  • +
  • Multiselects are useful when the action involves moving items between two lists.
  • +
+

+ For any user-defined data, it's difficult to be certain how many items will be in the list. Even data sets + that we might expect to be small—such as the number of forms in a module—might be large for + certain projects. It's better to assume that a list will grow large and display it as some kind of dropdown + where the options are a click away, rather than to assume it'll stay small and display all options on the page. +

+

+ Select-Toggle +

+

+ On the occasions when a list is guaranteed to be short (2-5 items), consider displaying it as a toggle. + This shows all options and only takes one click to select. +

+

+ We use a custom toggle widget <select-toggle> that uses + Knockout Components + and is conceptually the same as a single-select dropdown. + See + select_toggle.js + for full documentation. +

+

+ There's also a SelectToggle widget for use with Forms, defined in + hqwebapp's widgets.py. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.toggles %} +
+ A few places in HQ use the same look and feel as the select toggle widget but have unique implementations. + They generally use bootstrap's + button groups and + also often include our own btn-group-separated class, + which separates the buttons, making them easier to read and wrap better. +
+ +

+ Select2 +

+

+ For most lists, select2 is the way to go. It adds behavior to a normal <select> element. + It supports either hard-coded static options or dynamic options fetched via ajax. It can support free text + options, acting like an autocomplete, or can restrict users to a specific list of options. + Beyond these major options, select2 supports many more specific features and styling options; see + the full documentation for details. +

+

+ We instantiate select2 in a number of different ways: manually with javascript, via knockout bindings, + and by using CSS classes that certain javascript modules search for. +

+

+ We also have a select2 options for common behaviors like validating email addresses and displaying form + questions. Before you add a new custom set of select2 options, please look around and ask + around for other parts of HQ that have similar behavior. +

+

+ Manually in Javascript +

+

+ This is the most straightforward way of initializing a select2 element. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_manual %} +

+ Referencing a CSS Class +

+

+ We can automatically initialize a select2 using the css class hqwebapp-select2, + as long as the hqwebapp/js/widgets module is present. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_css_class %} +

+ This also applies <select multiple> elements: +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_css_class_multiple %} +

+ Dynamic Knockout Binding +

+

+ We can also use the knockout binding select2 to initialize a select2, with options + provided by Knockout. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_ko_dynamic %} +

+ Static Knockout Binding +

+

+ We can also initialize a select2 with the staticSelect2 Knockout Binding, where the options + are pulled from HTML instead of Knockout. This is useful for select2s that have + non-varying options but don't work with the hqwebapp-select2 CSS class because they're inside a + Knockout-controlled UI, so they aren't guaranteed to exist on page render. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_ko_static %} +

+ Autocomplete Knockout Binding +

+

+ To initialize a select2 to autocomplete select suggestions, use the autocompleteSelect2 + Knockout binding. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_ko_autocomplete %} + +

+ Multiselect +

+

+ This is a custom widget we built. It can be useful in situations where the user is adding and removing + items from one list to another and wants to be able to see both the included and excluded items. +

+
+ Be cautious adding it to new pages! Be sure that the visual + weight and potential learning curve is worthwhile for the workflow + you're creating. It's more complicated than a dropdown and takes up much more space. +
+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.multiselect %} +

+ Optional Properties +

+

+ In addition to the optional title properties, the following properties can be useful in situations where more + control is needed. +

+
+
+ disableModifyAllActions—defaults to false, useful when the preferred + workflow is to disable the ability to select and remove all items at once. +
+
+ willSelectAllListener—provides an opportunity to execute code prior to all items being + selected +
+
+ +

+ Other Selection Interactions +

+

+ There are several other interactions used on HQ to select items from a list, however use of these options + should be limited compared to the options above. +

+

+ Standard Select Elements +

+

+ There's nothing inherently wrong with standard <select> elements, but since so many + dropdowns use select2, <select> elements without this styling create + visual inconsistency. It should typically be trivial to turn a standard <select> + element into a select2. +

+
+ Long Lists: Standard <select> elements do interfere with usability + when their list of options gets long. + For instance, with 15+ items, it becomes difficult to find and select an item. Therefore, long lists + in particular should be switched to select2. +
+

+ Lists of Checkboxes +

+

+ Like standard HTML select elements, there's nothing inherently wrong with these, but because + we don't use them often, they're bad for a consistent user experience. +

+

+ At.js +

+

+ At.js is a library for mentioning people in comments. It's the basis for easy references in + Form Builder, used in the xpath expression builder. Form builder also uses it for autocomplete behavior + (form builder doesn't have select2 available). +

+

+ Case List Explorer use At.js for creating the advanced search query by allowing the user to search + and reference case properties as they build a query. +

+

+ Both Form Builder and Case List Explorer use At.js in a powerful way: to build queries or expressions with advanced + syntax. At.js should not be used for simple autocomplete or select behavior. +

+{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index c4db5828dc4c..bddd85dbc2c8 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -41,4 +41,6 @@ name="styleguide_atoms_icons_b5"), url(r'^b5/molecules/buttons/$', bootstrap5.styleguide_molecules_buttons, name="styleguide_molecules_buttons_b5"), + url(r'^b5/molecules/selections/$', bootstrap5.styleguide_molecules_selections, + name="styleguide_molecules_selections_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index af3d47b29ad1..a7443f38884f 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -61,3 +61,22 @@ def styleguide_molecules_buttons(request): } }) return render(request, 'styleguide/bootstrap5/molecules/buttons.html', context) + + +def styleguide_molecules_selections(request): + context = get_navigation_context("styleguide_molecules_selections_b5") + context.update({ + 'examples': { + 'toggles': get_example_context('styleguide/bootstrap5/examples/toggles.html'), + 'select2_manual': get_example_context('styleguide/bootstrap5/examples/select2_manual.html'), + 'select2_css_class': get_example_context('styleguide/bootstrap5/examples/select2_css_class.html'), + 'select2_css_class_multiple': get_example_context( + 'styleguide/bootstrap5/examples/select2_css_class_multiple.html'), + 'select2_ko_dynamic': get_example_context('styleguide/bootstrap5/examples/select2_ko_dynamic.html'), + 'select2_ko_static': get_example_context('styleguide/bootstrap5/examples/select2_ko_static.html'), + 'select2_ko_autocomplete': get_example_context( + 'styleguide/bootstrap5/examples/select2_ko_autocomplete.html'), + 'multiselect': get_example_context('styleguide/bootstrap5/examples/multiselect.html'), + } + }) + return render(request, 'styleguide/bootstrap5/molecules/selections.html', context) From 4d4dd4b06544e86261470adf0a76fc7a4ad3c523 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 31 Oct 2023 10:34:58 +0100 Subject: [PATCH 17/67] add a way to include crispy forms examples quickly in bootstrap5 styleguide --- corehq/apps/styleguide/context.py | 7 +++++++ .../apps/styleguide/examples/bootstrap5/__init__.py | 0 .../styleguide/bootstrap5/form_example.html | 13 +++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 corehq/apps/styleguide/examples/bootstrap5/__init__.py create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/form_example.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index b3d093f1ad59..1a3864796f46 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -5,6 +5,7 @@ Page = namedtuple('Page', 'name urlname') ColorGroup = namedtuple('ColorGroup', 'title description main_color') Color = namedtuple('Color', 'slug hex') +CrispyFormsDemo = namedtuple('CrispyFormsDemo', 'form code') def get_navigation_context(current_page): @@ -145,3 +146,9 @@ def get_example_context(filename): examples = os.path.join(os.path.dirname(__file__), 'templates') with open(os.path.join(examples, filename), 'r', encoding='utf-8') as content: return content.read() + + +def get_crispy_forms_context(filename): + examples = os.path.join(os.path.dirname(__file__), 'examples', 'bootstrap5') + with open(os.path.join(examples, filename), 'r', encoding='utf-8') as content: + return content.read() diff --git a/corehq/apps/styleguide/examples/bootstrap5/__init__.py b/corehq/apps/styleguide/examples/bootstrap5/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_example.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_example.html new file mode 100644 index 000000000000..b9a676334986 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_example.html @@ -0,0 +1,13 @@ +{% load crispy_forms_tags %} + +
+
+ {% crispy content.form %} +
+
+
python
+
{{ content.code }}
+
+
+
+
From e0d276008182b3bd56ea8640da4807f36c2574a3 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 31 Oct 2023 10:39:17 +0100 Subject: [PATCH 18/67] add styleguide for checkboxes and switches, use_bootstrap5 decorator needed to give crispy forms templates bootstrap version context --- corehq/apps/styleguide/context.py | 1 + .../examples/bootstrap5/checkbox_form.py | 63 ++++++++++ .../examples/bootstrap5/switch_form.py | 53 +++++++++ .../bootstrap5/examples/checkbox.html | 21 ++++ .../bootstrap5/examples/checkbox_form.html | 23 ++++ .../examples/checkbox_horizontal_form.html | 36 ++++++ .../bootstrap5/examples/switch.html | 16 +++ .../bootstrap5/molecules/checkboxes.html | 108 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 26 +++++ 10 files changed, 349 insertions(+) create mode 100644 corehq/apps/styleguide/examples/bootstrap5/checkbox_form.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/switch_form.py create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox_form.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox_horizontal_form.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/switch.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/checkboxes.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 1a3864796f46..21a5332db9a3 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -33,6 +33,7 @@ def get_navigation_context(current_page): pages=[ Page("Buttons", 'styleguide_molecules_buttons_b5'), Page("Selections", 'styleguide_molecules_selections_b5'), + Page("Checkboxes & Switches", 'styleguide_molecules_checkboxes_b5'), ], ), ], diff --git a/corehq/apps/styleguide/examples/bootstrap5/checkbox_form.py b/corehq/apps/styleguide/examples/bootstrap5/checkbox_form.py new file mode 100644 index 000000000000..1008bf867ec1 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/checkbox_form.py @@ -0,0 +1,63 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ + +from crispy_forms import ( + bootstrap as twbscrispy, + layout as crispy, +) + +from corehq.apps.hqwebapp import crispy as hqcrispy +from corehq.apps.hqwebapp.widgets import BootstrapCheckboxInput + + +class CheckboxDemoForm(forms.Form): + height = forms.CharField( + label=gettext_lazy("Height (cm)"), + ) + smoking_status = forms.BooleanField( + label=gettext_lazy("Smoking Status"), + required=False, + widget=BootstrapCheckboxInput( + inline_label=gettext_lazy( + "Patient has smoked on a habitual basis in the past 5 years" + ), + ), + help_text=gettext_lazy( + "*Habitual basis equates to at least five cigarettes a week." + ), + ) + heart_rate = forms.CharField( + label=gettext_lazy("Heart Rate (bpm)"), + required=False, + ) + forward_results = forms.BooleanField( + label=gettext_lazy("Forward results to GP"), + required=False, + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Basic Information"), + 'height', # Functions the same as crispy.Field below + twbscrispy.PrependedText('smoking_status', ''), + crispy.Field('heart_rate'), + 'forward_results', + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Save"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/examples/bootstrap5/switch_form.py b/corehq/apps/styleguide/examples/bootstrap5/switch_form.py new file mode 100644 index 000000000000..a2c3f37af7a8 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/switch_form.py @@ -0,0 +1,53 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ + +from crispy_forms import ( + bootstrap as twbscrispy, + layout as crispy, +) + +from corehq.apps.hqwebapp import crispy as hqcrispy +from corehq.apps.hqwebapp.widgets import BootstrapSwitchInput + + +class SwitchDemoForm(forms.Form): + email = forms.CharField( + label=gettext_lazy("Email"), + ) + enable_tracking = forms.BooleanField( + label=gettext_lazy("Enable Tracking"), + required=False, + widget=BootstrapSwitchInput( + inline_label=gettext_lazy( + "Allow Dimagi to collect usage information to improve CommCare." + ), + ), + help_text=gettext_lazy( + "You can learn more about the information we collect and the ways we use it in our privacy policy" + ), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Basic Information"), + 'email', + twbscrispy.PrependedText('enable_tracking', ''), + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Update Settings"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox.html new file mode 100644 index 000000000000..8b68baaab570 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox.html @@ -0,0 +1,21 @@ +
+ + +
+
+ + +
\ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox_form.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox_form.html new file mode 100644 index 000000000000..0445eb25eba1 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox_form.html @@ -0,0 +1,23 @@ +
+
+ + +
+
+
+ + +
+
+
+ +
+
diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox_horizontal_form.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox_horizontal_form.html new file mode 100644 index 000000000000..7b7d95eb7344 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/checkbox_horizontal_form.html @@ -0,0 +1,36 @@ +
+
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+ +
+ +
+
+
diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/switch.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/switch.html new file mode 100644 index 000000000000..601c09f61a28 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/switch.html @@ -0,0 +1,16 @@ +
+ + +
+
+ + +
+
+ + +
+
+ + +
\ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/checkboxes.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/checkboxes.html new file mode 100644 index 000000000000..ba37c224f628 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/checkboxes.html @@ -0,0 +1,108 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

Checkboxes & Switches

+

+ A guide of how we use checkboxes and switches in HQ. +

+{% endblock intro %} + +{% block toc %} +
On this page
+
+ +{% endblock toc %} + +{% block content %} +

Overview

+

+ HQ typically doesn't use checkboxes to select options from a list, but we do frequently use single + checkboxes for true or false values. In the past we didn't have switches available, + so checkboxes were often used to indicate whether we wanted to turn a setting on or off. +

+

+ However, with the introduction of switches in Bootstrap 5, we should move toward using switches for on/off settings + and checkboxes to indicate whether a statement is true or false. +

+

+ Checkboxes +

+

+ Checkboxes and their labels should get wrapped in a form-check classed div element. +

+

+ See Bootstrap's documentation + for a more complete checkbox deep dive. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.checkbox %} +

+ Checkbox Usage in Crispy Forms +

+

+ Checkboxes in form-horizontal classed crispy forms + can be challenging to style. Checkboxes are the default representation for a BooleanField, but they're + displayed with the label to the right of the checkbox, instead of displaying the label on the + left as for other fields. +

+

+ To get a label to appear on the left, checkboxes are sometimes displayed as a single-element you must use the + BootstrapCheckboxInput widget and the PrependText crispy forms layout element + as shown below. +

+

+ If you want to display a checkbox without an additional left-hand label, the default Field layout element + works perfectly fine. +

+ {% include 'styleguide/bootstrap5/form_example.html' with content=examples.checkbox_crispy %} +

+ Checkbox Usage in Standard HTML Forms +

+

+ As mentioned above, when checkbox labels are used, they should be statements about what the value means. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.checkbox_form %} +

+ Checkbox Usage in Horizontal Forms +

+

+ Checkboxes that appear in larger horizontal forms often have a separate label in addition to the label + next to the checkbox. The label on the left should be a short description of that checkbox (often the name of the field). + The label next to the checkbox should be a statement that expands on what that checkbox means. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.checkbox_horizontal_form %} + +

+ Switches +

+

+ Switches are new as of Bootstrap 5. Use switches for indicating whether a particular setting is turned on or off. + Switches are for settings, checkboxes are for statements. +

+ {% include 'styleguide/bootstrap5/code_example.html' with content=examples.switch %} +

+ Switch Usage in Crispy Forms +

+

+ Switches can also be used in crispy forms for BooleanFields using a combination of the + BootstrapSwitchInput widget and the PrependText crispy forms layout element + as shown below. +

+ {% include 'styleguide/bootstrap5/form_example.html' with content=examples.switch_crispy %} + +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index bddd85dbc2c8..f55aefc47068 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -43,4 +43,6 @@ name="styleguide_molecules_buttons_b5"), url(r'^b5/molecules/selections/$', bootstrap5.styleguide_molecules_selections, name="styleguide_molecules_selections_b5"), + url(r'^b5/molecules/checkboxes/$', bootstrap5.styleguide_molecules_checkboxes, + name="styleguide_molecules_checkboxes_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index a7443f38884f..209c0d942ad8 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -1,5 +1,6 @@ from django.shortcuts import render +from corehq.apps.hqwebapp.decorators import use_bootstrap5 from corehq.apps.styleguide.context import ( get_navigation_context, get_interaction_colors, @@ -7,7 +8,11 @@ get_common_icons, get_custom_icons, get_example_context, + get_crispy_forms_context, + CrispyFormsDemo, ) +from corehq.apps.styleguide.examples.bootstrap5.checkbox_form import CheckboxDemoForm +from corehq.apps.styleguide.examples.bootstrap5.switch_form import SwitchDemoForm def styleguide_home(request): @@ -80,3 +85,24 @@ def styleguide_molecules_selections(request): } }) return render(request, 'styleguide/bootstrap5/molecules/selections.html', context) + + +@use_bootstrap5 +def styleguide_molecules_checkboxes(request): + context = get_navigation_context("styleguide_molecules_checkboxes_b5") + context.update({ + 'examples': { + 'switch': get_example_context('styleguide/bootstrap5/examples/switch.html'), + 'checkbox': get_example_context('styleguide/bootstrap5/examples/checkbox.html'), + 'checkbox_form': get_example_context('styleguide/bootstrap5/examples/checkbox_form.html'), + 'checkbox_horizontal_form': get_example_context( + 'styleguide/bootstrap5/examples/checkbox_horizontal_form.html'), + 'checkbox_crispy': CrispyFormsDemo( + CheckboxDemoForm(), get_crispy_forms_context('checkbox_form.py'), + ), + 'switch_crispy': CrispyFormsDemo( + SwitchDemoForm(), get_crispy_forms_context('switch_form.py'), + ), + } + }) + return render(request, 'styleguide/bootstrap5/molecules/checkboxes.html', context) From b54c5c55b873d998e654af1417fdd666446b0bcb Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 1 Nov 2023 21:36:40 +0100 Subject: [PATCH 19/67] share more code between example templates --- .../styleguide/bootstrap5/base_example.html | 6 ++++++ .../styleguide/bootstrap5/code_example.html | 17 ++++++----------- .../styleguide/bootstrap5/form_example.html | 16 +++++----------- .../partials/readable_code_block.html | 6 ++++++ 4 files changed, 23 insertions(+), 22 deletions(-) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/base_example.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/partials/readable_code_block.html diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base_example.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base_example.html new file mode 100644 index 000000000000..ea5c4f7c5c76 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base_example.html @@ -0,0 +1,6 @@ +
+
+ {% block working_code %}{% endblock %} + {% block readable_code %}{% endblock %} +
+
diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_example.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_example.html index 8e95eba183b9..c99d6e3a8033 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_example.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_example.html @@ -1,11 +1,6 @@ -
-
- {{ content|safe }} -
-
-
HTML
-
{{ content }}
-
-
-
-
+{% extends 'styleguide/bootstrap5/base_example.html' %} + +{% block working_code %}{{ content|safe }}{% endblock %} +{% block readable_code %} + {% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content language="HTML" %} +{% endblock %} diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_example.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_example.html index b9a676334986..dd3bcb6e2df8 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_example.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_example.html @@ -1,13 +1,7 @@ +{% extends 'styleguide/bootstrap5/base_example.html' %} {% load crispy_forms_tags %} -
-
- {% crispy content.form %} -
-
-
python
-
{{ content.code }}
-
-
-
-
+{% block working_code %}{% crispy content.form %}{% endblock %} +{% block readable_code %} + {% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content.code language="Python" %} +{% endblock %} diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/partials/readable_code_block.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/partials/readable_code_block.html new file mode 100644 index 000000000000..79c35335962a --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/partials/readable_code_block.html @@ -0,0 +1,6 @@ +
+
+
{{ language }}
+
{{ content }}
+
+
From b7d4dc666e3a32dce0fce8792a85ca6f1d21979b Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 1 Nov 2023 21:37:50 +0100 Subject: [PATCH 20/67] add example template with crispy forms with js --- corehq/apps/styleguide/context.py | 7 +++++++ .../styleguide/bootstrap5/form_js_example.html | 13 +++++++++++++ corehq/apps/styleguide/views/bootstrap5.py | 2 ++ 3 files changed, 22 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/form_js_example.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 21a5332db9a3..1dc0863d9955 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -6,6 +6,7 @@ ColorGroup = namedtuple('ColorGroup', 'title description main_color') Color = namedtuple('Color', 'slug hex') CrispyFormsDemo = namedtuple('CrispyFormsDemo', 'form code') +CrispyFormsWithJsDemo = namedtuple('CrispyFormsWithJsDemo', 'form code_python code_js') def get_navigation_context(current_page): @@ -153,3 +154,9 @@ def get_crispy_forms_context(filename): examples = os.path.join(os.path.dirname(__file__), 'examples', 'bootstrap5') with open(os.path.join(examples, filename), 'r', encoding='utf-8') as content: return content.read() + + +def get_js_example_context(filename): + examples = os.path.join(os.path.dirname(__file__), 'static', 'styleguide', 'js_examples') + with open(os.path.join(examples, filename), 'r', encoding='utf-8') as content: + return content.read() diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_js_example.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_js_example.html new file mode 100644 index 000000000000..bb717e9b4898 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/form_js_example.html @@ -0,0 +1,13 @@ +{% extends 'styleguide/bootstrap5/base_example.html' %} +{% load crispy_forms_tags %} + +{% block working_code %} + {% crispy content.form %} + +{% endblock %} +{% block readable_code %} + {% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content.code_js language="JS" %} + {% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content.code_python language="Python" %} +{% endblock %} diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 209c0d942ad8..d05fd6107d79 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -10,6 +10,8 @@ get_example_context, get_crispy_forms_context, CrispyFormsDemo, + CrispyFormsWithJsDemo, + get_js_example_context, ) from corehq.apps.styleguide.examples.bootstrap5.checkbox_form import CheckboxDemoForm from corehq.apps.styleguide.examples.bootstrap5.switch_form import SwitchDemoForm From 554791c7affa9ed99c45c4715bf8d903d0d83fdd Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 1 Nov 2023 21:42:23 +0100 Subject: [PATCH 21/67] add demo for the Select2Ajax widget in crispy forms --- .../examples/bootstrap5/select2_ajax_form.py | 43 +++++++++++++++++++ .../templates/styleguide/bootstrap5/base.html | 1 + .../bootstrap5/molecules/selections.html | 15 +++++++ corehq/apps/styleguide/urls.py | 3 ++ corehq/apps/styleguide/views/bootstrap5.py | 3 ++ .../apps/styleguide/views/bootstrap5_data.py | 38 ++++++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 corehq/apps/styleguide/examples/bootstrap5/select2_ajax_form.py create mode 100644 corehq/apps/styleguide/views/bootstrap5_data.py diff --git a/corehq/apps/styleguide/examples/bootstrap5/select2_ajax_form.py b/corehq/apps/styleguide/examples/bootstrap5/select2_ajax_form.py new file mode 100644 index 000000000000..d7f301c5d974 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/select2_ajax_form.py @@ -0,0 +1,43 @@ +from django import forms +from django.urls import reverse +from django.utils.translation import gettext_lazy, gettext as _ +from crispy_forms import bootstrap as twbscrispy, layout as crispy +from corehq.apps.hqwebapp import crispy as hqcrispy +from corehq.apps.hqwebapp.widgets import Select2Ajax + + +class Select2AjaxDemoForm(forms.Form): + user_filter = forms.Field( + label=gettext_lazy("Users(s)"), + required=False, + widget=Select2Ajax(multiple=True), + help_text=gettext_lazy("Select the users you want to view data for"), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['user_filter'].widget.set_url( + reverse("styleguide_data_select2_ajax_demo") + ) + + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Choose Filters"), + 'user_filter', + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Search"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html index 187334bb8c70..c92b1464e004 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html @@ -93,6 +93,7 @@
Quick Links
+ diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html index beb2ac19b37a..933f19b20ab4 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html @@ -21,6 +21,7 @@
On this page
  • Dynamic Knockout Binding
  • Static Knockout Binding
  • Autocomplete Knockout Binding
  • +
  • Crispy Forms Select2Ajax Widget
  • Multiselect @@ -150,6 +151,20 @@

    {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_ko_autocomplete %} + +

    + Crispy Forms Select2Ajax Widget +

    +

    + It's also possible to use select2 that fetches its options asynchronously in crispy forms using the + Select2Ajax widget. This is extremely useful for selecting from a large data set, like + Mobile Workers or Locations. A very simplified example is below. +

    +
    + Note that you will need a view to POST queries to with this widget. It's recommended to explore + how Select2Ajax is currently being used in HQ. +
    + {% include 'styleguide/bootstrap5/form_example.html' with content=examples.select2_ajax_crispy %}

    Multiselect

    diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index f55aefc47068..32c8ed464558 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -10,6 +10,7 @@ from corehq.apps.styleguide.views.docs import default from corehq.apps.styleguide.views import bootstrap5 +from corehq.apps.styleguide.views import bootstrap5_data doc_urlpatterns = [ url(r'^$', default, name='sg_examples_default'), @@ -29,6 +30,8 @@ name=PagesStyleGuideView.urlname), url(r'^docs/', include(doc_urlpatterns)), url(r'^b5/$', bootstrap5.styleguide_home, name="styleguide_home_b5"), + url(r'^b5/data/select2_ajax_demo$', bootstrap5_data.select2_ajax_demo, + name="styleguide_data_select2_ajax_demo"), url(r'^b5/guidelines/$', bootstrap5.styleguide_code_guidelines, name="styleguide_code_guidelines_b5"), url(r'^b5/atoms/accessibility/$', bootstrap5.styleguide_atoms_accessibility, diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index d05fd6107d79..6136f180da19 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -84,6 +84,9 @@ def styleguide_molecules_selections(request): 'select2_ko_autocomplete': get_example_context( 'styleguide/bootstrap5/examples/select2_ko_autocomplete.html'), 'multiselect': get_example_context('styleguide/bootstrap5/examples/multiselect.html'), + 'select2_ajax_crispy': CrispyFormsDemo( + Select2AjaxDemoForm(), get_crispy_forms_context('select2_ajax_form.py'), + ), } }) return render(request, 'styleguide/bootstrap5/molecules/selections.html', context) diff --git a/corehq/apps/styleguide/views/bootstrap5_data.py b/corehq/apps/styleguide/views/bootstrap5_data.py new file mode 100644 index 000000000000..4d82788ba9c7 --- /dev/null +++ b/corehq/apps/styleguide/views/bootstrap5_data.py @@ -0,0 +1,38 @@ +from collections import namedtuple + +from django.http import JsonResponse + +FakeUser = namedtuple('FakeUser', 'id username') + + +def select2_ajax_demo(request): + request_data = request.POST if request.method == 'POST' else request.GET + users = [ + FakeUser('12345', 'fisconsp'), + FakeUser('23523', 'acesureq'), + FakeUser('234235', 'ivendial'), + FakeUser('2352352', 'letricav'), + FakeUser('54645623', 'viogrelo'), + FakeUser('346233456', 'maravegran'), + FakeUser('3242314', 'eruseheram'), + FakeUser('7897543', 'ordistager'), + FakeUser('54678', 'itecusepec'), + ] + + page = int(request_data.get('page', 1)) + size = int(request_data.get('page_limit', 5)) + start = size * (page - 1) + query = request_data.get('q', '') + + filtered_users = [u for u in users if query in u.username] if query else users + total = len(filtered_users) + end = min(size * page, total) + filtered_users = filtered_users[start:end] + results = [ + {'id': u.id, 'text': u.username} for u in filtered_users + ] + + return JsonResponse({ + "results": results, + "total": total, + }) From 6251207a2c640d87706f4129c54a22635bf85ab0 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 1 Nov 2023 21:44:45 +0100 Subject: [PATCH 22/67] add crispy forms related docs for selections --- .../examples/bootstrap5/multiselect_form.py | 48 +++++++ .../select2_autocomplete_ko_form.py | 38 ++++++ .../bootstrap5/select2_css_class_form.py | 58 +++++++++ .../bootstrap5/select2_dynamic_ko_form.py | 38 ++++++ .../bootstrap5/select2_manual_form.py | 56 +++++++++ .../bootstrap5/select2_static_ko_form.py | 44 +++++++ .../examples/bootstrap5/select_toggle_form.py | 50 ++++++++ .../js_examples/multiselect_crispy.js | 16 +++ .../select2_autocomplete_ko_crispy.js | 10 ++ .../js_examples/select2_dynamic_ko_crispy.js | 14 +++ .../js_examples/select2_manual_crispy.js | 4 + .../js_examples/select2_static_ko_crispy.js | 3 + .../bootstrap5/examples/multiselect.html | 2 +- .../bootstrap5/molecules/selections.html | 118 ++++++++++++++++-- corehq/apps/styleguide/views/bootstrap5.py | 40 ++++++ 15 files changed, 530 insertions(+), 9 deletions(-) create mode 100644 corehq/apps/styleguide/examples/bootstrap5/multiselect_form.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/select2_autocomplete_ko_form.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/select2_css_class_form.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/select2_dynamic_ko_form.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/select2_manual_form.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/select2_static_ko_form.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/select_toggle_form.py create mode 100644 corehq/apps/styleguide/static/styleguide/js_examples/multiselect_crispy.js create mode 100644 corehq/apps/styleguide/static/styleguide/js_examples/select2_autocomplete_ko_crispy.js create mode 100644 corehq/apps/styleguide/static/styleguide/js_examples/select2_dynamic_ko_crispy.js create mode 100644 corehq/apps/styleguide/static/styleguide/js_examples/select2_manual_crispy.js create mode 100644 corehq/apps/styleguide/static/styleguide/js_examples/select2_static_ko_crispy.js diff --git a/corehq/apps/styleguide/examples/bootstrap5/multiselect_form.py b/corehq/apps/styleguide/examples/bootstrap5/multiselect_form.py new file mode 100644 index 000000000000..4c0d84cd2cb0 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/multiselect_form.py @@ -0,0 +1,48 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ +from crispy_forms import bootstrap as twbscrispy, layout as crispy +from corehq.apps.hqwebapp import crispy as hqcrispy + + +class MultiselectDemoForm(forms.Form): + team = forms.MultipleChoiceField( + label=gettext_lazy("Team"), + required=False, + help_text=gettext_lazy("Make your team selection"), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # in theory, you can populate this from a parameter passed in args or kwargs + self.fields['team'].choices = [ + (name, name) for name in [ + "Stephen Curry", "Nikola Jokic", "Joel Embiid", "Damian Lillard", "Kevin Durant", "Anthony Davis", + "Jayson Tatum", "Paul George", "Zach LaVine", "Desmond Bane", "Bam Adebayo", "Karl-Anthony Towns" + ] + ] + self.fields['team'].initial = [ + "Stephen Curry", "Jayson Tatum", + ] + + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Team Builder"), + 'team', + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Save Team"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/examples/bootstrap5/select2_autocomplete_ko_form.py b/corehq/apps/styleguide/examples/bootstrap5/select2_autocomplete_ko_form.py new file mode 100644 index 000000000000..a51c3de3a930 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/select2_autocomplete_ko_form.py @@ -0,0 +1,38 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ +from crispy_forms import bootstrap as twbscrispy, layout as crispy +from corehq.apps.hqwebapp import crispy as hqcrispy + + +class Select2AutocompleteKoForm(forms.Form): + vegetable = forms.ChoiceField( + label=gettext_lazy("Vegetable"), + required=False, + help_text=gettext_lazy("Select your favorite vegetable you want recipe suggestions for"), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.form_id = "ko-veggie-suggestions" + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Veggie Recipes"), + crispy.Field('vegetable', data_bind="autocompleteSelect2: veggies, value: value"), + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Suggest Recipes"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/examples/bootstrap5/select2_css_class_form.py b/corehq/apps/styleguide/examples/bootstrap5/select2_css_class_form.py new file mode 100644 index 000000000000..097f3c92d4da --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/select2_css_class_form.py @@ -0,0 +1,58 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ +from crispy_forms import bootstrap as twbscrispy, layout as crispy +from corehq.apps.hqwebapp import crispy as hqcrispy + + +class Select2CssClassDemoForm(forms.Form): + lake = forms.ChoiceField( + label=gettext_lazy("Lake"), + required=False, + help_text=gettext_lazy("Select a lake you would like to visit"), + ) + activities = forms.MultipleChoiceField( + label=gettext_lazy("Activities"), + choices=( + ("kay", gettext_lazy("Kayak")), + ("sup", gettext_lazy("SUP")), + ("can", gettext_lazy("Canoe")), + ("bot", gettext_lazy("Boat")), + ("swi", gettext_lazy("Swim")), + ), + required=False, + help_text=gettext_lazy("Select the activities you would like to do"), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # in theory, you can populate this from a parameter passed in args or kwargs + self.fields['lake'].choices = [ + (lake, lake) for lake in [ + "Veluwemeer", "IJesselmeer", "Markermeer", "Gooimeer", "Westeinderplassen", "Kralingen", + "Berkendonk", "Oldambtmeer", "Loosdrechste Plassen", "Zevenhuizplas", "Burgurmer Mar", + ] + ] + + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Activity Planner"), + crispy.Field('lake', css_class="hqwebapp-select2"), + crispy.Field('activities', css_class="hqwebapp-select2"), + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Create Schedule"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/examples/bootstrap5/select2_dynamic_ko_form.py b/corehq/apps/styleguide/examples/bootstrap5/select2_dynamic_ko_form.py new file mode 100644 index 000000000000..a19c97d83269 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/select2_dynamic_ko_form.py @@ -0,0 +1,38 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ +from crispy_forms import bootstrap as twbscrispy, layout as crispy +from corehq.apps.hqwebapp import crispy as hqcrispy + + +class Select2DynamicKoForm(forms.Form): + genre = forms.ChoiceField( + label=gettext_lazy("Genre"), + required=False, + help_text=gettext_lazy("Select the electronic music genre you want to generate a playlist"), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.form_id = "ko-playlist-generator" + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Playlist Creator"), + crispy.Field('genre', data_bind="select2: genres, value: value"), + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Create Playlist"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/examples/bootstrap5/select2_manual_form.py b/corehq/apps/styleguide/examples/bootstrap5/select2_manual_form.py new file mode 100644 index 000000000000..227e8a3fd52f --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/select2_manual_form.py @@ -0,0 +1,56 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ +from crispy_forms import bootstrap as twbscrispy, layout as crispy +from corehq.apps.hqwebapp import crispy as hqcrispy + + +class Select2ManualDemoForm(forms.Form): + location = forms.ChoiceField( + label=gettext_lazy("Location"), + required=False, + help_text=gettext_lazy("Select the location you would like to see recommendations for."), + ) + experiences = forms.MultipleChoiceField( + label=gettext_lazy("Experiences"), + required=False, + help_text=gettext_lazy("Select the experiences you would like to have"), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # in theory, you can populate this from a parameter passed in args or kwargs + self.fields['location'].choices = [ + (city, city) for city in [ + "Berlin", "Amsterdam", "Frankfurt", "Paris", "Stockholm", "Reykjavik", "Geneva", "The Hague", + "Rome", "Oslo", "London", "Hamburg", "Copenhagen", "Cape Town", "New York", "Atlanta", + ] + ] + self.fields['experiences'].choices = [ + (experience, experience) for experience in [ + "Food", "Museum", "Music", "Street Art", "Street Food", "Underground", "Buildings", "Monuments", + ] + ] + + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("City Adventure Planner"), + 'location', + 'experiences', + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Plan"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/examples/bootstrap5/select2_static_ko_form.py b/corehq/apps/styleguide/examples/bootstrap5/select2_static_ko_form.py new file mode 100644 index 000000000000..7d0be0518476 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/select2_static_ko_form.py @@ -0,0 +1,44 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ +from crispy_forms import bootstrap as twbscrispy, layout as crispy +from corehq.apps.hqwebapp import crispy as hqcrispy + + +class Select2StaticKoForm(forms.Form): + pastries = forms.MultipleChoiceField( + label=gettext_lazy("Pastries"), + required=False, + help_text=gettext_lazy("Select pastry names you would like ChatGPT to create an enticing menu for"), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['pastries'].choices = [ + (pastry, pastry) for pastry in [ + "Mille-feuille", "Croissant", "Eclair", "Choux", "Cinnamon roll", "Tart", "Profiteroles", + "Bear claw", "Croquembouche", "Baklava", "Cannoli", "Strudel", "Canele", + ] + ] + + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.form_id = "ko-menu-generator" + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Menu Generator"), + crispy.Field('pastries', data_bind="staticSelect2: {}"), + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Create Menu"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/examples/bootstrap5/select_toggle_form.py b/corehq/apps/styleguide/examples/bootstrap5/select_toggle_form.py new file mode 100644 index 000000000000..805469ecd996 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/select_toggle_form.py @@ -0,0 +1,50 @@ +from django import forms +from django.utils.translation import gettext_lazy, gettext as _ +from crispy_forms import bootstrap as twbscrispy, layout as crispy +from corehq.apps.hqwebapp import crispy as hqcrispy +from corehq.apps.hqwebapp.widgets import SelectToggle + +COLOR_CHOICES = [ + ('r', gettext_lazy('Red')), + ('g', gettext_lazy('Green')), + ('b', gettext_lazy('Blue')) +] + + +class SelectToggleDemoForm(forms.Form): + color = forms.ChoiceField( + label=gettext_lazy("Color"), + required=False, + choices=COLOR_CHOICES, # we need to specify this twice for form validation + widget=SelectToggle( + choices=COLOR_CHOICES, + apply_bindings=True, + attrs={}, # you can specify ko_value or other select-toggle parameters here + ), + help_text=gettext_lazy("What is your favorite primary color"), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.helper = hqcrispy.HQFormHelper() + self.helper.form_method = 'POST' + self.helper.form_action = '#' + self.helper.layout = crispy.Layout( + crispy.Fieldset( + _("Color Chooser"), + 'color', + ), + hqcrispy.FormActions( + twbscrispy.StrictButton( + _("Save"), + type="submit", + css_class="btn btn-primary", + ), + hqcrispy.LinkButton( + _("Cancel"), + '#', + css_class="btn btn-outline-primary", + ), + ), + ) diff --git a/corehq/apps/styleguide/static/styleguide/js_examples/multiselect_crispy.js b/corehq/apps/styleguide/static/styleguide/js_examples/multiselect_crispy.js new file mode 100644 index 000000000000..ab46fc801a20 --- /dev/null +++ b/corehq/apps/styleguide/static/styleguide/js_examples/multiselect_crispy.js @@ -0,0 +1,16 @@ +$(function () { + let teamListener = function() { + console.log("Triggered willSelectAllListener"); + }; + + $(function () { + var multiselect_utils = hqImport('hqwebapp/js/multiselect_utils'); + multiselect_utils.createFullMultiselectWidget('id_team', { + selectableHeaderTitle: gettext("Benched"), + selectedHeaderTitle: gettext("Playing"), + searchItemTitle: gettext("Search Team..."), + disableModifyAllActions: false, + willSelectAllListener: teamListener, + }); + }); +}); diff --git a/corehq/apps/styleguide/static/styleguide/js_examples/select2_autocomplete_ko_crispy.js b/corehq/apps/styleguide/static/styleguide/js_examples/select2_autocomplete_ko_crispy.js new file mode 100644 index 000000000000..71c0607d5714 --- /dev/null +++ b/corehq/apps/styleguide/static/styleguide/js_examples/select2_autocomplete_ko_crispy.js @@ -0,0 +1,10 @@ +$(function () { + $("#ko-veggie-suggestions").koApplyBindings(function () { + return { + veggies: [ + "kale", "broccoli", "radish", "bell pepper", "sweet potato", "spinach", "cabbage", + ], + value: ko.observable(''), + }; + }); +}); \ No newline at end of file diff --git a/corehq/apps/styleguide/static/styleguide/js_examples/select2_dynamic_ko_crispy.js b/corehq/apps/styleguide/static/styleguide/js_examples/select2_dynamic_ko_crispy.js new file mode 100644 index 000000000000..4fd57a392eca --- /dev/null +++ b/corehq/apps/styleguide/static/styleguide/js_examples/select2_dynamic_ko_crispy.js @@ -0,0 +1,14 @@ +$(function () { + $("#ko-playlist-generator").koApplyBindings(function () { + return { + genres: [ + "techno", "house", "acid", "electro", "bass", "drum & bass", + "jungle", "club", "detroit techno", "detroit house", "chicago house", + "soulful house", "west coast electro", "rave", "acid techno", + "percussive techno", "hypnotic techno", "breaks", "deep house", + "deep techno", "jack", + ], + value: ko.observable("acid"), + }; + }); +}); \ No newline at end of file diff --git a/corehq/apps/styleguide/static/styleguide/js_examples/select2_manual_crispy.js b/corehq/apps/styleguide/static/styleguide/js_examples/select2_manual_crispy.js new file mode 100644 index 000000000000..65ca0a7e5dca --- /dev/null +++ b/corehq/apps/styleguide/static/styleguide/js_examples/select2_manual_crispy.js @@ -0,0 +1,4 @@ +$(function () { + $("#id_location").select2(); + $("#id_experiences").select2(); +}); \ No newline at end of file diff --git a/corehq/apps/styleguide/static/styleguide/js_examples/select2_static_ko_crispy.js b/corehq/apps/styleguide/static/styleguide/js_examples/select2_static_ko_crispy.js new file mode 100644 index 000000000000..8accf85a6588 --- /dev/null +++ b/corehq/apps/styleguide/static/styleguide/js_examples/select2_static_ko_crispy.js @@ -0,0 +1,3 @@ +$(function () { + $("#ko-menu-generator").koApplyBindings(); +}); \ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/multiselect.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/multiselect.html index 0ad2bc1a8f0b..0f673c60b477 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/multiselect.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/multiselect.html @@ -1,4 +1,4 @@ - diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html index 933f19b20ab4..4b6c34518201 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/selections.html @@ -13,20 +13,45 @@
    On this page
  • +

    + Usage in Crispy Forms +

    +

    + In crispy forms, we can use the SelectToggle widget on a ChoiceField. If the crispy + form is not being included inside a knockout model, apply_bindings=True must be specified in the + widget's arguments. Otherwise, you can specify ko_value, as well as other options in + attrs. +

    + {% include 'styleguide/bootstrap5/form_example.html' with content=examples.toggles_crispy %} +

    Select2

    @@ -105,13 +142,23 @@

    questions. Before you add a new custom set of select2 options, please look around and ask around for other parts of HQ that have similar behavior.

    +

    - Manually in Javascript + Manual Setup

    This is the most straightforward way of initializing a select2 element.

    {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_manual %} + +

    + Manual Setup with Crispy Forms +

    +

    + This is similar to the manual setup above, but using crispy forms to provide the form HTML. +

    + {% include 'styleguide/bootstrap5/form_js_example.html' with content=examples.select2_manual_crispy %} +

    Referencing a CSS Class

    @@ -124,6 +171,16 @@

    This also applies <select multiple> elements:

    {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_css_class_multiple %} + +

    + Referencing the CSS Class in Crispy Forms +

    +

    + This is similar to the HTML-based setups above, but adding the hqwebapp-select2 to + crispy.Field's css_class argument instead. +

    + {% include 'styleguide/bootstrap5/form_example.html' with content=examples.select2_css_class_crispy %} +

    Dynamic Knockout Binding

    @@ -132,6 +189,18 @@

    provided by Knockout.

    {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_ko_dynamic %} + +

    + Dynamic Knockout Binding with Crispy Forms +

    +

    + This is similar to the HTML-based setups above, except that an external script applies koApplyBindings + to the <form> id (<form> can also be wrapped with a <div> with the same + id). In order to apply the binding to the ChoiceField in + crispy forms, the data_bind argument is used inside crispy.Field. +

    + {% include 'styleguide/bootstrap5/form_js_example.html' with content=examples.select2_ko_dynamic_crispy %} +

    Static Knockout Binding

    @@ -142,15 +211,36 @@

    Knockout-controlled UI, so they aren't guaranteed to exist on page render.

    {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_ko_static %} + +

    + Static Knockout Binding with Crispy Forms +

    +

    + This is similar to the HTML-based setups above, except that an external script applies koApplyBindings + to the <form> id (<form> can also be wrapped with a <div> with the same + id). +

    + {% include 'styleguide/bootstrap5/form_js_example.html' with content=examples.select2_ko_static_crispy %} +

    Autocomplete Knockout Binding

    To initialize a select2 to autocomplete select suggestions, use the autocompleteSelect2 - Knockout binding. + Knockout binding. The difference between this binding and the original select2, is the ability to + enter free text.

    {% include 'styleguide/bootstrap5/code_example.html' with content=examples.select2_ko_autocomplete %} +

    + Autocomplete Knockout Binding with Crispy Forms +

    +

    + This is similar to the HTML-based setups above, except that an external script applies koApplyBindings + to the <form> id (<form> can also be wrapped with a <div> with the same + id). +

    + {% include 'styleguide/bootstrap5/form_js_example.html' with content=examples.select2_ko_autocomplete_crispy %}

    Crispy Forms Select2Ajax Widget @@ -165,6 +255,7 @@

    how Select2Ajax is currently being used in HQ.

    {% include 'styleguide/bootstrap5/form_example.html' with content=examples.select2_ajax_crispy %} +

    Multiselect

    @@ -178,6 +269,7 @@

    you're creating. It's more complicated than a dropdown and takes up much more space.

    {% include 'styleguide/bootstrap5/code_example.html' with content=examples.multiselect %} +

    Optional Properties

    @@ -196,6 +288,14 @@

    +

    + Use in Crispy Forms +

    +

    + This is similar to the manual setup above, but using crispy forms to provide the form HTML. +

    + {% include 'styleguide/bootstrap5/form_js_example.html' with content=examples.multiselect_crispy %} +

    Other Selection Interactions

    @@ -203,6 +303,7 @@

    There are several other interactions used on HQ to select items from a list, however use of these options should be limited compared to the options above.

    +

    Standard Select Elements

    @@ -218,6 +319,7 @@

    For instance, with 15+ items, it becomes difficult to find and select an item. Therefore, long lists in particular should be switched to select2.

    +

    Lists of Checkboxes

    diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 6136f180da19..08a9e52edd81 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -14,6 +14,14 @@ get_js_example_context, ) from corehq.apps.styleguide.examples.bootstrap5.checkbox_form import CheckboxDemoForm +from corehq.apps.styleguide.examples.bootstrap5.multiselect_form import MultiselectDemoForm +from corehq.apps.styleguide.examples.bootstrap5.select2_ajax_form import Select2AjaxDemoForm +from corehq.apps.styleguide.examples.bootstrap5.select2_autocomplete_ko_form import Select2AutocompleteKoForm +from corehq.apps.styleguide.examples.bootstrap5.select2_css_class_form import Select2CssClassDemoForm +from corehq.apps.styleguide.examples.bootstrap5.select2_dynamic_ko_form import Select2DynamicKoForm +from corehq.apps.styleguide.examples.bootstrap5.select2_manual_form import Select2ManualDemoForm +from corehq.apps.styleguide.examples.bootstrap5.select2_static_ko_form import Select2StaticKoForm +from corehq.apps.styleguide.examples.bootstrap5.select_toggle_form import SelectToggleDemoForm from corehq.apps.styleguide.examples.bootstrap5.switch_form import SwitchDemoForm @@ -70,20 +78,52 @@ def styleguide_molecules_buttons(request): return render(request, 'styleguide/bootstrap5/molecules/buttons.html', context) +@use_bootstrap5 def styleguide_molecules_selections(request): context = get_navigation_context("styleguide_molecules_selections_b5") context.update({ 'examples': { 'toggles': get_example_context('styleguide/bootstrap5/examples/toggles.html'), + 'toggles_crispy': CrispyFormsDemo( + SelectToggleDemoForm(), get_crispy_forms_context('select_toggle_form.py'), + ), 'select2_manual': get_example_context('styleguide/bootstrap5/examples/select2_manual.html'), + 'select2_manual_crispy': CrispyFormsWithJsDemo( + form=Select2ManualDemoForm(), + code_python=get_crispy_forms_context('select2_manual_form.py'), + code_js=get_js_example_context('select2_manual_crispy.js'), + ), 'select2_css_class': get_example_context('styleguide/bootstrap5/examples/select2_css_class.html'), 'select2_css_class_multiple': get_example_context( 'styleguide/bootstrap5/examples/select2_css_class_multiple.html'), + 'select2_css_class_crispy': CrispyFormsDemo( + Select2CssClassDemoForm(), get_crispy_forms_context('select2_css_class_form.py'), + ), 'select2_ko_dynamic': get_example_context('styleguide/bootstrap5/examples/select2_ko_dynamic.html'), + 'select2_ko_dynamic_crispy': CrispyFormsWithJsDemo( + form=Select2DynamicKoForm(), + code_python=get_crispy_forms_context('select2_dynamic_ko_form.py'), + code_js=get_js_example_context('select2_dynamic_ko_crispy.js'), + ), 'select2_ko_static': get_example_context('styleguide/bootstrap5/examples/select2_ko_static.html'), + 'select2_ko_static_crispy': CrispyFormsWithJsDemo( + form=Select2StaticKoForm(), + code_python=get_crispy_forms_context('select2_static_ko_form.py'), + code_js=get_js_example_context('select2_static_ko_crispy.js'), + ), 'select2_ko_autocomplete': get_example_context( 'styleguide/bootstrap5/examples/select2_ko_autocomplete.html'), + 'select2_ko_autocomplete_crispy': CrispyFormsWithJsDemo( + form=Select2AutocompleteKoForm(), + code_python=get_crispy_forms_context('select2_autocomplete_ko_form.py'), + code_js=get_js_example_context('select2_autocomplete_ko_crispy.js'), + ), 'multiselect': get_example_context('styleguide/bootstrap5/examples/multiselect.html'), + 'multiselect_crispy': CrispyFormsWithJsDemo( + form=MultiselectDemoForm(), + code_python=get_crispy_forms_context('multiselect_form.py'), + code_js=get_js_example_context('multiselect_crispy.js'), + ), 'select2_ajax_crispy': CrispyFormsDemo( Select2AjaxDemoForm(), get_crispy_forms_context('select2_ajax_form.py'), ), From e976fb623e24b9edb498060acac12264941dd8ff Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 1 Nov 2023 21:45:03 +0100 Subject: [PATCH 23/67] make sure example forms appear the same as the rest of HQ --- corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss b/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss index 8cef4f140893..cdc2f02034b8 100644 --- a/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss +++ b/corehq/apps/hqwebapp/static/hqwebapp/scss/styleguide.scss @@ -17,6 +17,14 @@ font-size: 1rem; } +.sg-example { + font-size: $font-size-base; + + pre { + font-size: .8rem; + } +} + .sg-sidebar { grid-area: sidebar; From d0a8ede69bfefe82c39a62dc44ac9be700808634 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Mon, 6 Nov 2023 20:41:00 +0100 Subject: [PATCH 24/67] add USE_BOOTSTRAP5 to window context before javascript_libraries template tag --- .../apps/styleguide/templates/styleguide/bootstrap5/base.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html index c92b1464e004..0628cb7f4bbb 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html @@ -28,6 +28,10 @@ href="{% static "hqwebapp/less/components/multiselect/multiselect.less" %}" /> {% endcompress %} + + {% javascript_libraries hq=True use_bootstrap5=True %} From 142d28ea68ace937df161712ca90822424ab4f81 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Mon, 6 Nov 2023 20:41:38 +0100 Subject: [PATCH 25/67] make sure styleguide/base.html has the initial data and registered url blocks so that the template tags work properly for initial_page_data and registerurl --- .../templates/styleguide/bootstrap5/base.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html index 0628cb7f4bbb..b852ecc373ad 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/base.html @@ -103,5 +103,16 @@
    Quick Links
    {% endcompress %} +
    + {% block initial_page_data %} + {# do not override this block, use initial_page_data template tag to populate #} + {% endblock %} +
    +
    + {% block registered_urls %} + {# do not override this block, use registerurl template tag to populate #} + {% endblock %} +
    + From 2c3ff84e611c68bd43c361bb2d61b48c1bd3a054 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Mon, 6 Nov 2023 20:44:57 +0100 Subject: [PATCH 26/67] add styleguide page for modals --- corehq/apps/styleguide/context.py | 1 + .../styleguide/bootstrap5/examples/modal.html | 30 +++++ .../bootstrap5/examples/modal_ko.html | 87 +++++++++++++ .../bootstrap5/examples/open_modal_ko.html | 36 ++++++ .../examples/open_remote_modal_ko.html | 18 +++ .../bootstrap5/examples/remote_modal.html | 21 +++ .../bootstrap5/molecules/modals.html | 121 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 4 + corehq/apps/styleguide/views/bootstrap5.py | 16 +++ .../apps/styleguide/views/bootstrap5_data.py | 8 ++ 10 files changed, 342 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/modal.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/modal_ko.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/open_modal_ko.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/open_remote_modal_ko.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/remote_modal.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/modals.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 1dc0863d9955..8aee39688e0a 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -35,6 +35,7 @@ def get_navigation_context(current_page): Page("Buttons", 'styleguide_molecules_buttons_b5'), Page("Selections", 'styleguide_molecules_selections_b5'), Page("Checkboxes & Switches", 'styleguide_molecules_checkboxes_b5'), + Page("Modals", 'styleguide_molecules_modals_b5'), ], ), ], diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/modal.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/modal.html new file mode 100644 index 000000000000..783d504e701a --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/modal.html @@ -0,0 +1,30 @@ + + + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/modal_ko.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/modal_ko.html new file mode 100644 index 000000000000..ce0bd8259c41 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/modal_ko.html @@ -0,0 +1,87 @@ +
    +
    + +
    +
    +
    +
    +

    + +
    +
    +
    + +
    + + +
    + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/open_modal_ko.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/open_modal_ko.html new file mode 100644 index 000000000000..2211226c2b69 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/open_modal_ko.html @@ -0,0 +1,36 @@ +
    + +
    + + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/open_remote_modal_ko.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/open_remote_modal_ko.html new file mode 100644 index 000000000000..003d5cab5954 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/open_remote_modal_ko.html @@ -0,0 +1,18 @@ +
    + +
    + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/remote_modal.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/remote_modal.html new file mode 100644 index 000000000000..bc93900c5f85 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/remote_modal.html @@ -0,0 +1,21 @@ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/modals.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/modals.html new file mode 100644 index 000000000000..15eeab4849c9 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/modals.html @@ -0,0 +1,121 @@ +{% extends 'styleguide/bootstrap5/base.html' %} +{% load hq_shared_tags %} + +{% block intro %} +

    Modals

    +

    + When reaching for a modal, first consider if you can communicate this message in another way. +

    +{% endblock intro %} + +{% block toc %} +
    On this page
    +
    + +{% endblock toc %} + +{% block content %} +

    Overview

    +

    + Modals are disruptive, confusing, poorly accessible, blocking the user’s interaction, hard to escape, + used as a junk drawer, frustrating on small screens, and add to cognitive load. + Consider non-modal dialogs on empy screen space, go inline, expand elements or use a new page. +

    +
    + If you must use a modal, make sure it is easy to close, single purpose, short, and + accessible. +
    +

    + There are lots of alternatives to modals. Most of the time, if you need to confirm an action, material + design suggests instead offering an option to undo. This still gives a user an option to reverse an + action, but it does not interrupt their flow and increase their cognitive load. + Read more on modalzmodalzmodalz.com +

    + +

    + Using Modals +

    +

    + When it's appropriate to use a modal, we have several options in HQ to initialize a modal. +

    + +

    + Standard Usage +

    +

    + The standard way to use modals is with HTML—an example is shown below. + You can read Bootstrap 5's modal docs + for all available background options, sizing, javascript usage, and more. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.modal %} + +

    + Modal Knockout Binding +

    +

    + It is also possible to control modals with Knockout using the modal knockout binding. + This binding accepts an observable as an argument. If the value of the observable is + true, then the modal is shown. If the value is false, + then the modal is hidden. This method eliminates the use of the data-bs-toggle="modal" and + data-bs-target="#modalId" attributes on the modal trigger element, as well as the + data-bs-dismiss="modal" attributes. +

    +

    + The most simplified version of this is to have a boolean observable bound to modal that's + toggled true or false with knockout code. However, the example below is a slightly + more complex approach that's more realistic to how we use it in HQ (like with UserRole editing). +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.modal_ko %} + +

    + OpenModal Knockout Binding +

    +

    + This method quickly opens a modal using the openModal knockout binding, which takes a string value + of the id of the knockout template supplying the HTML for this modal. +

    +
    + Note that the HTML for the modal in the knockout template differentiates from the standard use because it doesn't + contain the <div class="modal fade"> wrapper element. Additionally, the modal inherits the + knockout model context that was applied to the element that applied openModal binding. +
    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.open_modal_ko %} + +

    + OpenRemoteModal Knockout Binding +

    +

    + Another less frequently-used way of triggering a modal is to use the openRemoteModal Knockout Binding. + This binding takes a URL to a view in HQ that renders the modal-dialog content of the modal, similar + to the knockout template above. +

    + {% registerurl "styleguide_data_remote_modal" %} + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.open_remote_modal_ko %} +

    + In the example above, the URL passed to openRemoteModal was registered + on the page using the following template tag: +

    +
    +
    +
    {% registerurl "styleguide_data_remote_modal" %}
    +
    +
    +

    + The view for styleguide_data_remote_modal rendered the HTML below. Note that the secret_message + template variable was populated byt the GET parameter testParam specified + at the end of the remoteUrl value as seen in the code above. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.remote_modal %} +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index 32c8ed464558..c4d082faaacb 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -32,6 +32,8 @@ url(r'^b5/$', bootstrap5.styleguide_home, name="styleguide_home_b5"), url(r'^b5/data/select2_ajax_demo$', bootstrap5_data.select2_ajax_demo, name="styleguide_data_select2_ajax_demo"), + url(r'^b5/data/remote_modal_demo$', bootstrap5_data.remote_modal_demo, + name="styleguide_data_remote_modal"), url(r'^b5/guidelines/$', bootstrap5.styleguide_code_guidelines, name="styleguide_code_guidelines_b5"), url(r'^b5/atoms/accessibility/$', bootstrap5.styleguide_atoms_accessibility, @@ -48,4 +50,6 @@ name="styleguide_molecules_selections_b5"), url(r'^b5/molecules/checkboxes/$', bootstrap5.styleguide_molecules_checkboxes, name="styleguide_molecules_checkboxes_b5"), + url(r'^b5/molecules/modals/$', bootstrap5.styleguide_molecules_modals, + name="styleguide_molecules_modals_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 08a9e52edd81..1f70a8822ef8 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -151,3 +151,19 @@ def styleguide_molecules_checkboxes(request): } }) return render(request, 'styleguide/bootstrap5/molecules/checkboxes.html', context) + + +@use_bootstrap5 +def styleguide_molecules_modals(request): + context = get_navigation_context("styleguide_molecules_modals_b5") + context.update({ + 'examples': { + 'modal': get_example_context('styleguide/bootstrap5/examples/modal.html'), + 'modal_ko': get_example_context('styleguide/bootstrap5/examples/modal_ko.html'), + 'open_modal_ko': get_example_context('styleguide/bootstrap5/examples/open_modal_ko.html'), + 'open_remote_modal_ko': get_example_context( + 'styleguide/bootstrap5/examples/open_remote_modal_ko.html'), + 'remote_modal': get_example_context('styleguide/bootstrap5/examples/remote_modal.html'), + } + }) + return render(request, 'styleguide/bootstrap5/molecules/modals.html', context) diff --git a/corehq/apps/styleguide/views/bootstrap5_data.py b/corehq/apps/styleguide/views/bootstrap5_data.py index 4d82788ba9c7..a056e978a499 100644 --- a/corehq/apps/styleguide/views/bootstrap5_data.py +++ b/corehq/apps/styleguide/views/bootstrap5_data.py @@ -1,6 +1,7 @@ from collections import namedtuple from django.http import JsonResponse +from django.shortcuts import render FakeUser = namedtuple('FakeUser', 'id username') @@ -36,3 +37,10 @@ def select2_ajax_demo(request): "results": results, "total": total, }) + + +def remote_modal_demo(request): + secret_message = request.GET.get('testParam') + return render(request, "styleguide/bootstrap5/examples/remote_modal.html", { + "secret_message": secret_message, + }) From ba62c91781915cce5fbf66101dc5bb5a8a570c78 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Mon, 6 Nov 2023 23:02:48 +0100 Subject: [PATCH 27/67] add pagination section to molecules --- corehq/apps/styleguide/context.py | 1 + .../bootstrap5/examples/pagination.html | 39 ++++++++++ .../bootstrap5/molecules/pagination.html | 77 +++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 11 +++ 5 files changed, 130 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/pagination.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/pagination.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 8aee39688e0a..2af88e1696f4 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -36,6 +36,7 @@ def get_navigation_context(current_page): Page("Selections", 'styleguide_molecules_selections_b5'), Page("Checkboxes & Switches", 'styleguide_molecules_checkboxes_b5'), Page("Modals", 'styleguide_molecules_modals_b5'), + Page("Pagination", 'styleguide_molecules_pagination_b5'), ], ), ], diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/pagination.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/pagination.html new file mode 100644 index 000000000000..86d43dc5694f --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/pagination.html @@ -0,0 +1,39 @@ +
    +
      +
    • +
    + +
    + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/pagination.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/pagination.html new file mode 100644 index 000000000000..7a930a77bada --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/pagination.html @@ -0,0 +1,77 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

    Pagination

    +

    + Most UIs that display a list of user-created data will grow to the point that they should paginate their data. +

    +{% endblock intro %} + +{% block toc %} +
    On this page
    +
    + +{% endblock toc %} + +{% block content %} +

    Overview

    +

    + HQ has a custom pagination component that uses + Knockout Components. + See + pagination.js + for full documentation. +

    +

    + Using Pagination +

    +

    + The best way to understand the different ways of using pagination is to see its use in HQ directly. The best + sources for this are the Web Users and Mobile Workers pages. +

    +

    + For the Web Users page, the key points are: +

    + +

    + A Quick Example +

    +

    + Here is a quick example simulating the pagination that should otherwise be done asynchronously as in the Web Users + example above. This is just so you have a visual reference of the pagination widget. +

    +
    + For small, simple UIs, you can leave the "Showing X to Y of Z entries" text and dropdown off by adding + inlinePageListOnly: true to the pagination element's params. You can see an example of this on the + HQ Dashboard page. +
    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.pagination %} +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index c4d082faaacb..63c0079649b7 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -52,4 +52,6 @@ name="styleguide_molecules_checkboxes_b5"), url(r'^b5/molecules/modals/$', bootstrap5.styleguide_molecules_modals, name="styleguide_molecules_modals_b5"), + url(r'^b5/molecules/pagination/$', bootstrap5.styleguide_molecules_pagination, + name="styleguide_molecules_pagination_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 1f70a8822ef8..1b410c3ccb7f 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -167,3 +167,14 @@ def styleguide_molecules_modals(request): } }) return render(request, 'styleguide/bootstrap5/molecules/modals.html', context) + + +@use_bootstrap5 +def styleguide_molecules_pagination(request): + context = get_navigation_context("styleguide_molecules_pagination_b5") + context.update({ + 'examples': { + 'pagination': get_example_context('styleguide/bootstrap5/examples/pagination.html'), + } + }) + return render(request, 'styleguide/bootstrap5/molecules/pagination.html', context) From 66235d92938c9e2655e96e63749bc675dd504e0f Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 7 Nov 2023 19:12:28 +0100 Subject: [PATCH 28/67] add section for searching and filtering in molecules for bootstrap 5 styleguide --- corehq/apps/styleguide/context.py | 1 + .../bootstrap5/examples/search_box.html | 30 +++++ .../bootstrap5/molecules/searching.html | 118 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 11 ++ 5 files changed, 162 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/search_box.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/searching.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 2af88e1696f4..3ff6ed0c1f7c 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -37,6 +37,7 @@ def get_navigation_context(current_page): Page("Checkboxes & Switches", 'styleguide_molecules_checkboxes_b5'), Page("Modals", 'styleguide_molecules_modals_b5'), Page("Pagination", 'styleguide_molecules_pagination_b5'), + Page("Searching & Filtering", 'styleguide_molecules_searching_b5'), ], ), ], diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/search_box.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/search_box.html new file mode 100644 index 000000000000..7e5d1e909ece --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/search_box.html @@ -0,0 +1,30 @@ +
    + +
      +
    • +
    +
    + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/searching.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/searching.html new file mode 100644 index 000000000000..b6264b35685f --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/searching.html @@ -0,0 +1,118 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

    Searching & Filtering

    +

    + Large sets of data should usually support search. +

    +{% endblock intro %} + +{% block toc %} +
    On this page
    +
    + +{% endblock toc %} + +{% block content %} +

    Overview

    +

    + HQ has a custom searching and filtering component that uses + Knockout Components. + See + search_box.js + for full documentation. +

    +

    + Usage +

    +

    + The best way to understand how to implement the search box widget is to see its use in HQ directly. The best + sources for this are the Web Users and Mobile Workers pages. As you might notice, it's often the case that the + search box component is used in combination with the + pagination component. +

    +

    + For the Mobile Workers page, the key points are: +

    + + +

    + A Quick Example +

    +

    + Here is a quick example simulating the search box usage. Ideally, this searching should be done asynchronously, + as this widget is most useful for larger data sets, and it would likely be inefficient store the whole dataset in memory. + This is mainly to have a visual reference of the search box widget. +

    +
    + Note: + The immediate parameter used in this example controls whether the widget searches on every key press or only when + the user clicks the search button or presses enter. +
    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.search_box %} + +

    + Client-Side Only Search +

    +

    + In some cases we might only want to do client-side searches. This means that the entire data set is stored in browser + memory, and we query that dataset without making additional calls to the server. +

    +

    + An example use case for this is the "Clean Case Data" modal that can be accessed from the Case Data + page. In this page we use the search box widget to filter case properties. +

    +

    + Key points for this example are: +

    + +
    + Note that this is an example referencing the search-box widget usage only. The UI for this feature as a whole + should not be duplicated as a "best practice" and hopefully cleaned up in the future. +
    +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index 63c0079649b7..8f3ac88f2737 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -54,4 +54,6 @@ name="styleguide_molecules_modals_b5"), url(r'^b5/molecules/pagination/$', bootstrap5.styleguide_molecules_pagination, name="styleguide_molecules_pagination_b5"), + url(r'^b5/molecules/searching/$', bootstrap5.styleguide_molecules_searching, + name="styleguide_molecules_searching_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 1b410c3ccb7f..20a3972ff805 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -178,3 +178,14 @@ def styleguide_molecules_pagination(request): } }) return render(request, 'styleguide/bootstrap5/molecules/pagination.html', context) + + +@use_bootstrap5 +def styleguide_molecules_searching(request): + context = get_navigation_context("styleguide_molecules_searching_b5") + context.update({ + 'examples': { + 'search_box': get_example_context('styleguide/bootstrap5/examples/search_box.html'), + } + }) + return render(request, 'styleguide/bootstrap5/molecules/searching.html', context) From 0bc49eaa6b2fdc1bdcbc3e7777717369e935d1ef Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 7 Nov 2023 19:12:41 +0100 Subject: [PATCH 29/67] update some text in pagination section --- .../styleguide/bootstrap5/molecules/pagination.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/pagination.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/pagination.html index 7a930a77bada..637452de33ef 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/pagination.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/pagination.html @@ -45,20 +45,20 @@

  • - the HTML widget initializing the pagination - + the HTML widget + initializing the pagination
  • the goToPage javascript function - + that retrieves data for a given page
  • - the django view that returns the pagination information - + the django view + that returns the pagination information
  • From d540c6ac93dd3b5a4ccc34d233107e51b7427eab Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 7 Nov 2023 19:19:02 +0100 Subject: [PATCH 30/67] update typos in table of contents for searching section --- .../templates/styleguide/bootstrap5/molecules/searching.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/searching.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/searching.html index b6264b35685f..1ec2f05eaf05 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/searching.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/searching.html @@ -13,9 +13,10 @@
    On this page
    {% endblock toc %} @@ -53,8 +66,9 @@

    Interaction and Attention

    - For specific usage (with different shades), please refer to things like Buttons and Alerts in the - Molecules section. This is intended for quick reference and to convey big-picture ideas. + Note: The subtle shades provided are present so that hex values of "subtle" colors are easily accessible + for design purposes. These lighter subtle colors are intended to be coupled with + darker text on top and are used as default backgrounds for Molecules like Alerts.

    {% for swatch in interaction %} @@ -70,4 +84,80 @@

    {% include 'styleguide/bootstrap5/atoms/partials/swatch.html' %} {% endfor %}

    + +

    + Colors for Design +

    +

    + Sometimes there is a need for additional colors when designing a new component which don't fall into any + of the communication categories above. The simple requirement is a color that meets our branding requirements. + For this we have several theme colors accessible through SCSS variables that follow + the Dimagi brand guidelines and Bootstrap 5 shading rules. +

    +
    + Important: These colors should not be applied to HQ without sign-off from senior developers + and a design review. The colors appear here for reference of what options are available for use. +
    + +

    + CommCare Blue aka Blue +

    +

    + The CommCare "cornflower blue" is what's applied to the $primary, and therefore $blue + or $blue-500 shade. Below are approved gradations from light to dark based on this color. +

    + {% include 'styleguide/bootstrap5/atoms/partials/gradient.html' with gradient=gradient.blue %} + +

    + Gray +

    +

    + While $dark, $secondary, and $light are the preferred shades + of gray for the theme, it is also possible to choose additional shades listed below. +

    + {% include 'styleguide/bootstrap5/atoms/partials/gradient.html' with gradient=gradient.gray %} + +

    + Dimagi Gradient +

    +

    + Dimagi's branding has a gradient of color going from $dimagi-indigo (aka $indigo) + to $dimagi-mango (aka $orange). + We sliced this gradient into 25% intervals due to a decent contrast ratio of colors between intervals. + However, since $orange often has an emotional conection between danger and warning, we leave that + out of the usable "design" colors, preferring to include shades from $indigo to $salmon. +

    + {% include 'styleguide/bootstrap5/atoms/partials/gradient.html' with gradient=gradient.slices %} + +

    + Gradient Shades +

    +

    + Below are the above four design-friendly gradient colors divided further into Bootstrap 5 interval shades, + where the $*-500 color is equivalent to the main color listed above. +

    +
    +
    + {% include 'styleguide/bootstrap5/atoms/partials/gradient.html' with gradient=gradient.indigo %} +
    +
    + {% include 'styleguide/bootstrap5/atoms/partials/gradient.html' with gradient=gradient.purple %} +
    +
    + {% include 'styleguide/bootstrap5/atoms/partials/gradient.html' with gradient=gradient.pink %} +
    +
    + {% include 'styleguide/bootstrap5/atoms/partials/gradient.html' with gradient=gradient.salmon %} +
    +
    + +

    + Dimagi Palette +

    +

    + Below are the six colors named in the Dimagi color palette. The ones in use by our theme are marked. + However, since $dimagi-deep-purple feels very similar to $indigo-800 and + $dimagi-sky similar to $blue-400, we prefer to avoid use of those colors. +

    + {% include 'styleguide/bootstrap5/atoms/partials/gradient.html' with gradient=gradient.dimagi %} {% endblock content %} diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/gradient.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/gradient.html new file mode 100644 index 000000000000..c38886e8900e --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/gradient.html @@ -0,0 +1,14 @@ +
    +
    + {% for color in gradient %} +
    + ${{ color.slug }}: #{{ color.hex }} + {% if color.theme_equivalent %} +
    + equivalent to ${{ color.theme_equivalent }} +
    + {% endif %} +
    + {% endfor %} +
    +
    diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/swatch.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/swatch.html index 399dc7dfb1e1..1011dc7951ef 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/swatch.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/swatch.html @@ -2,12 +2,25 @@

    {{ swatch.title }}

    - - ${{ swatch.main_color.slug }} - - - #{{ swatch.main_color.hex }} - +
    + + ${{ swatch.main_color.slug }}: #{{ swatch.main_color.hex }} + +
    + {% if swatch.subtle_color %} +
    + + ${{ swatch.subtle_color.slug }}: #{{ swatch.subtle_color.hex }} + +
    + {% endif %} + {% if swatch.emphasis_color %} +
    + + ${{ swatch.emphasis_color.slug }}: #{{ swatch.emphasis_color.hex }} + +
    + {% endif %}

    {{ swatch.description }}

    diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index e0d5dd5b4b44..5c5b7a5c2904 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -12,6 +12,7 @@ CrispyFormsDemo, CrispyFormsWithJsDemo, get_js_example_context, + get_gradient_colors, ) from corehq.apps.styleguide.examples.bootstrap5.checkbox_form import CheckboxDemoForm from corehq.apps.styleguide.examples.bootstrap5.crispy_forms_basic import BasicCrispyExampleForm @@ -56,6 +57,7 @@ def styleguide_atoms_colors(request): context.update({ 'interaction': get_interaction_colors(), 'neutral': get_neutral_colors(), + 'gradient': get_gradient_colors(), }) return render(request, 'styleguide/bootstrap5/atoms/colors.html', context) From 3761f06a26e980eb6b9555807568436aade39664 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 6 Dec 2023 13:49:36 -0500 Subject: [PATCH 43/67] add more context surrounding tables and layout --- .../bootstrap5/organisms/tables.html | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/organisms/tables.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/organisms/tables.html index 8bc45d775a9c..499635615e3b 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/organisms/tables.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/organisms/tables.html @@ -31,7 +31,11 @@
    On this page

    +

    + Tables and Layout? +

    +

    + Due to the nature of table cells and the ability to stack them horizontally, vertically, and apply certain + alignment rules to their contents, it can be very appealing to use tables to for layout. +

    +

    + Please do not do this. +

    +

    + As mentioned in the first sentence of the overview, tables are for tabular data. They are + not for aligning form fields or creating page sections and layouts. +

    +

    + Here are pointers toward more optimal decisions: +

    +
      +
    • +

      + Need to create vertical "columns" of sections within a page? + Bootstrap 5's Grid and + Column guides can help. +

      +
    • +
    • +

      + Tempted to use a table with form labels and fields? Please don't. We have great documentation on how to + horizontally style forms properly. +

      +
    • +
    • +

      + "What if my data doesn't fit the grid system? Tables seem so much more flexible for things like vertical alignment + and dynamic widths." If this sounds familiar, then perhaps Bootstrap 5's + flex utilities are what you need. +

      +
    • +

    Basic Table

    From bfe1dc133dd4deea99b32a10c5b5e05a771b393d Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Wed, 13 Dec 2023 15:56:54 -0500 Subject: [PATCH 44/67] add migration guide --- corehq/apps/styleguide/context.py | 1 + .../bootstrap5/migration_guide.html | 358 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 5 + 4 files changed, 366 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index c708073f2e77..30bd5b586b62 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -19,6 +19,7 @@ def get_navigation_context(current_page): pages=[ Page("Introduction", 'styleguide_home_b5'), Page("Code Guidelines", 'styleguide_code_guidelines_b5'), + Page("Migration Guide", 'styleguide_migration_guide_b5'), ], ), NavigationGroup( diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html new file mode 100644 index 000000000000..6e65bf738f94 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html @@ -0,0 +1,358 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

    Migration Guide

    +

    + How to migrate an HQ application to the next Bootstrap version. +

    +{% endblock intro %} + +{% block toc %} +
    On this page
    +
    + +{% endblock toc %} + +{% block content %} +

    + Overview +

    +
    + At present, HQ is undergoing a migration from Bootstrap 3 to Bootstrap 5. At the end of this migration, please + update this notice and leave this page as documentation for the next Bootstrap migration. +
    +

    + We are taking an app-by-app approach to migrating from Bootstrap 3 to 5. This process is summarized by the following: +

    +
      +
    • +

      + Using an automated process, split template and javascript files that need changes into bootstrap3 + and bootstrap5 versions. This process will find / replace the straightforward changes and flag + more complex changes to be addressed later. +

      +
    • +
    • +

      + Migrate views in the app one-by-one by applying the @use_bootstrap5 decorator and + ensuring template and javascript files for that view inherit from bootstrap5 base templates + and javascript dependencies. This process will be visual in nature, and may involve updates to the + Bootstrap 5 stylesheet and/or restructuring HTML and javascript components to ensure the view renders properly + with no javascript errors. +

      +
    • +
    • +

      + Once bootstrap3 versions of a template or javascript file are no longer referenced, the + bootstrap5 version can be "un-split" and the file moved back to the original location prior to + the split. +

      +
    • +
    • +

      + An app will be considered fully migrated when all template and javascript files are no longer split into + bootstrap3 and bootstrap5 versions and every view in the app is decorated with + @use_bootstrap5. +

      +
    • +
    • +

      + Once all apps are fully migrated to Bootstrap 5, we can then remove the use of the any in-template splits + referencing request.use_boostrap5, so that any Bootstrap 3 related code is removed. Lastly, a final + cleanup should be done to remove the @use_bootstrap5 decorator from all the views. +

      +
    • +
    + +

    + Prepare Local Environment +

    +

    + If you haven't done so, you will need to install Dart Sass to compile + scss files. The recommended method is with homebrew brew install sass/sass/sass, + as described in DEV_SETUP.md. +

    +

    + Next, you will need to specify BOOTSTRAP_MIGRATION_LOGS_DIR in localsettings.py. This + will be where the migration management command will leave longer notes for each migrated file. +

    + +

    + Step 1: Announce Migration +

    +

    + Before you begin the migration of an app, please announce your intention to do so in #gtd-dev. It is + important to communicate timelines for how long you expect the "split files" stage to last. Additionally, please + ask that people refrain from any front-end development in that app until changes from the split files step have + been merged. +

    +

    + After announcing your intent to migrate the app, please update the app's migration status + in this table. +

    + +

    + Step 2: Split Files +

    +

    + The next step is to split affected template and javascript files into bootstrap3 and + bootstrap5 versions. This is an automated process that uses a management command to find and + replace the straightforward changes, while flagging more complex changes to be addressed later. +

    +

    + Please set aside focused time to PR these changes as soon as possible to avoid any migration conflicts or + missed renamed references, especially in parts of the codebase that are undergoing frequent front-end changes. This + initial "split file" Pull Request should only contain changes automatically made by the management command. + Additional changes should be made in subsequent PRs. +

    +

    + Use the management command below with <app_name> being the + name of the application you would like to migrate: +

    +
    +
    +
    ./manage.py migrate_app_to_bootstrap5 <app_name>
    +
    +
    +

    + The management command will iterate through all template and javascript files in the app. + The command will prompt you to accept each find-and-replace change in a file. More involved changes will be + flagged with notes saved for later in BOOTSTRAP_MIGRATION_LOGS_DIR. You will always have the option + to skip changes that do not make sense. +

    +

    + Once a file is updated and split into the two bootstrap versions, the command will + find references to the original filepath and replace them with the filepath to the bootstrap3 version. +

    +

    + After applying all the actions related to splitting a file, it is recommended to commit those changes before + moving on to the next file. The management command will prompt you to do this with a suggested commit message. + Formatting our commits this way is important to maintain a clean git history. +

    + +

    + Configure & Update Diffs +

    +

    + Since an app migration usually takes several weeks, we need to ensure that any changes + made to bootstrap3 templates during this time are kept in sync with their bootstrap5 + counterparts. We do this by saving diffs of the split files and running tests against them to ensure diffs stay the + same. Once changes are made to both split files, the diffs can be regenerated so that tests continue to pass. +

    +

    + As migrate_app_to_bootstrap5 iterates through each template and javascript directory, + it will create new bootstrap3 and bootstrap5 directories. + For instance app_manager/base_template.html now becomes + app_manager/bootstrap3/base_template.html and app_manager/bootstrap5/base_template.html. +

    +

    + When new split directories are created, please ensure the paths to these directories are added to + + bootstrap5_diff_config.json + and commit those changes. Once these paths are added, please run the following management command and commit the results. +

    +
    +
    +
    ./manage.py build_bootstrap5_diffs
    +
    +
    + +

    + Verify References +

    +

    + Right before submitting the "split files" Pull Request, it is important to rebase the latest master + branch into your working branch and run the following command: +

    +
    +
    +
    ./manage.py migrate_app_to_bootstrap5 <app_name> --verify-references
    +
    +
    +

    + This will iterate through all the split bootstrap3 files in the app and ensure that references to the + old file (without bootstrap3/ in the filepath) are updated to the bootstrap3 path. + The reason why we do this right before making the pull request is so that any changes merged into master since + the split files process began are checked for references so that we can avoid any 404s or 500s. +

    +

    + After verifying references, it might be necessary to run build_bootstrap5_diffs again before finally + opening the Pull Request. +

    + +

    + Step 2B: Migrate Stylesheets +

    +

    + Some larger applications, like the App Builder and Web Apps, have their own stylesheets that add or modify styles + on top of the main stylesheet. Since Bootstrap 5 has moved to using SASS / SCSS instead of LESS, less + files that are part of the app undergoing a migration will need to be migrated from less to + scss. +

    +

    + The process for this step in the migration is not automated due to the rarity and complexity of this requirement. + You can begin this process by creating parallel scss files for all the existing less + files. The contents can be copied over from less to scss and the syntax updated to + use SCSS style variables and mixins. + Here is a guide to + help with those changes. +

    +

    + It is important to update any variables from the old Bootstrap 3 stylesheet to their Bootstrap 5 counterparts. + Please work closely with the lead developer of the Bootstrap migration, so you can receive guidance to do this + part accurately. +

    +
    + It is important to create a separate Pull Request for stylesheet changes. This PR should come after the "split files" + changes in the previous step. +
    + +

    + Step 3: Migrating Views +

    +

    + The next step is to migrate the app's views one-by-one. It is recommended to make a pull request for each view + or group of small related views, rather than migrating a lot of views and having a very large Pull Request. +

    +

    + The migration process begins by either applying @use_bootstrap5 decorator the view function or + @method_decorator(use_bootstrap5, name='dispatch') to the view class. +

    +

    + Next, you should go into the view template and ensure that this template inherits from bootstrap5 + base templates. +

    +

    + Finally, you should make sure any javascript files needed to render that view also inherit from bootstrap5 + dependencies. As you migrate a view's requirejs module, it is important to update the + split_bundles + map in build_requirejs. +

    +

    + Once a view's template and javascript files updated, it is now time to load that view make visual observations and + make adjustments to get the view to render without javascript or visual errors. The view should be as similar + as possible to its Bootstrap 3 version, which you can compare with on production. +

    +

    + A pixel-perfect migration from Bootstrap 3 to Bootstrap 5 will likely not be possible for each page, as Bootstrap 5 + has removed several components (like panel, for instance) and replaced them with new components + (like cards). The migration helper migrate_app_to_bootstrap5 should help with + guidance for making more complex replacements of removed components. +

    +
    + The most important part of the migration is ensuring that the page is functionally similar to the user and that no + errors are present on the page that were not previously present in the Bootstrap 3 version. +
    +

    + There is a chance you might have to introduce changes to the stylesheet if you come across a custom component that + has not yet been migrated to Bootstrap 5. If this is the case, please flag this component with the lead developer + of the Bootstrap migration. They can assist with updating the stylesheet (if necessary) or updating guidance + for replacing this component with Bootstrap 5 best practices. +

    + +

    + Un-Split View Files +

    +

    + Once your view is functional under the Bootstrap 5 changes, check to see whether the boostrap3 versions + of your template or javascript files are being referenced elsewhere. If not, it is time to "un-split" that template + by removing the bootstrap3 version of that file and moving the bootstrap5 version into + the file's original location before the split. When you do this, please ensure references to the bootstrap5 + file are updated to reflect the changed filepath. +

    +

    + If the file you are "un-splitting" is the last file in the bootstrap3 split directory for that path, + please ensure that path is removed from + + bootstrap5_diff_config.json + . +

    + +

    + Deploy to Staging +

    +

    + Once you have your migrated view working locally, it is important to deploy your view's branch to staging to ensure + that the requirejs build doesn't encounter any issues and that there are no other staticfiles or javascript + issues with this view. It is often the case that the production environment introduces front-end issues that are + often not discovered when testing locally, due to the complexity of the requirejs build, django compressor, caching, + and content distribution of static files. +

    + +

    + Rebuild Diffs +

    +

    + It is likely that you will have to run build_bootstrap5_diffs after the view migration. This will + regenerate any diffs on split files affected by these changes. +

    +
    + Important: Please refrain from including commits from build_bootstrap5_diffs + in the branch you push to staging, as it might introduce conflicts with other branches working on the Boostrap + migration. Please add these diff commits right before making your Pull Request, when you are confident + the migration changes are working as expected on staging. +
    + +

    + Step 4: Completing the App Migration +

    +

    + An app is considered fully migrated when all split files created in "Step 2" have been "un-split" and + moved back to their original location. These files now fully inherit from boostrap5 base + templates and dependencies. +

    +

    + When you have reached this point in the app migration, it's time to move on to the next application. + Please update the app's migration status + in this table. +

    + +

    + Final Cleanup Process +

    +

    + Once all of the apps have completed the migration process, it will be time to do the final global cleanup of + HQ. This involves making bootstrap5 the default behavior for templates by removing any split + code changes referencing request.use_bootstrap5 or get_bootstrap_version() in + templates, template tags, and other files. +

    +

    + Once these changes are complete, the @use_bootstrap5 decorator can be removed from all the views. +

    +

    + Then, build_requirejs can be updated to only build bootstrap5 version of files, with + the split requirejs_config.js files no longer needed, and the + split_bundles map in build_requirejs can be removed. +

    +

    + Finally, LESS files can be removed from all parts of HQ and COMPRESS_PRECOMPILERS in + settings.py can be updated to only precompile SCSS. Any LESS-related dependencies can be removed from + packange.json and commcare-cloud, and new developer setup guides like DEV_SETUP.md can + be updated to remove references to LESS. +

    +

    + When you have completed the above changes, it is time to think about updating this guide to reflect on + the process of this migration and suggestions for how to handle future migrations. LESS-related references will + likely no longer be needed for future migrations, as Boostrap will stay on SASS/SCSS, so it will be fine to remove + support for that. However, it might be good to leave pointers to commits, files, and other resources that + we have used to support this migration. This page can then serve as the starting point for anyone embarking on + a future (and hopefully less painful) challenge of the next Bootstrap Migration. +

    + +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index 458b6dc6180d..3a09b9e72f02 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -46,6 +46,8 @@ name="styleguide_paginated_table_data"), url(r'^b5/guidelines/$', bootstrap5.styleguide_code_guidelines, name="styleguide_code_guidelines_b5"), + url(r'^b5/migration/$', bootstrap5.styleguide_migration_guide, + name="styleguide_migration_guide_b5"), url(r'^b5/atoms/accessibility/$', bootstrap5.styleguide_atoms_accessibility, name="styleguide_atoms_accessibility_b5"), url(r'^b5/atoms/typography/$', bootstrap5.styleguide_atoms_typography, diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 5c5b7a5c2904..185c2312bcdc 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -42,6 +42,11 @@ def styleguide_code_guidelines(request): get_navigation_context("styleguide_code_guidelines_b5")) +def styleguide_migration_guide(request): + return render(request, 'styleguide/bootstrap5/migration_guide.html', + get_navigation_context("styleguide_migration_guide_b5")) + + def styleguide_atoms_accessibility(request): return render(request, 'styleguide/bootstrap5/atoms/accessibility.html', get_navigation_context("styleguide_atoms_accessibility_b5")) From 38be322eba44e8d54335de2d2400e9537234c33e Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 18 Jan 2024 16:20:29 +0100 Subject: [PATCH 45/67] update refs to hqwebapp/js/widgets in the styleguide --- .../templates/styleguide/bootstrap3/examples/select2.html | 2 +- .../apps/styleguide/templates/styleguide/bootstrap5/base.html | 2 +- .../templates/styleguide/bootstrap5/molecules/selections.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap3/examples/select2.html b/corehq/apps/styleguide/templates/styleguide/bootstrap3/examples/select2.html index 834929b7f0e7..0cbdbca054ed 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap3/examples/select2.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap3/examples/select2.html @@ -7,7 +7,7 @@

    - + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/date_range.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/date_range.html new file mode 100644 index 000000000000..4b59f11e56ed --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/date_range.html @@ -0,0 +1,19 @@ + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/datepicker_widget.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/datepicker_widget.html new file mode 100644 index 000000000000..923976df1eb7 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/datepicker_widget.html @@ -0,0 +1 @@ + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/tempus_dominus.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/tempus_dominus.html new file mode 100644 index 000000000000..cf5a0b012dee --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/tempus_dominus.html @@ -0,0 +1,11 @@ + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/time_only.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/time_only.html new file mode 100644 index 000000000000..02ac6cae9757 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/time_only.html @@ -0,0 +1,17 @@ + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/time_only_24.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/time_only_24.html new file mode 100644 index 000000000000..ece592ea4705 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/time_only_24.html @@ -0,0 +1,18 @@ + + + diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/dates_times.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/dates_times.html new file mode 100644 index 000000000000..0847c1839b2b --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/molecules/dates_times.html @@ -0,0 +1,120 @@ +{% extends 'styleguide/bootstrap5/base.html' %} +{% load hq_shared_tags %} + +{% block intro %} +

    Dates & Times

    +

    + Having an easy-to-use widget to select dates and times greatly improves user experience. +

    +{% endblock intro %} + +{% block toc %} +
    On this page
    +
    + +{% endblock toc %} + +{% block content %} +

    Overview

    +

    + Over the course of HQ's history, we have trialed and tested several date and time pickers. + We have finally settled on one library, Tempus Dominus, for its + accessibility features and ease of localization. Below are examples of how to use it in various scenarios, as well as + guidance for how to replace older tools on Bootstrap 3 pages with this new library. +

    +

    + Tempus Dominus emerged from the eonasdan-bootstrap-datetimepicker, + which is still referenced in Bootstrap 3 pages as the datetimepicker jQuery plugin. Any references to + datetimepicker should be replaced with tempusDominus when migrating a page from + Bootstrap 3 to 5. +

    +

    + There are also references to the jQuery UI datepicker plugin, the timpicker plugin + (from the abandoned bootstrap-timepicker project), and daterangepicker (from + bootstrap-daterangepicker) in Bootstrap 3 pages. All of these should be replaced with Tempus Dominus + during the migration of a page from Bootstrap 3 to 5. +

    +
    + Important Usage Note: To use Tempus Dominus on a page, you will need to apply the + @use_datetimepicker decorator to your view to ensure that the CSS (on all views) and javascript + (on non-requirejs views) are included. + If you are using requirejs, make sure that datetimepicker is in your list of dependencies. +
    + +

    + Simple Date Picker Widget +

    +

    + If you are in need of a simple date picker widget that returns a format in YYYY-MM-DD, then + your best option is to add the date-picker CSS class to any text input and + make sure that hqwebapp/js/bootstrap5/widgets is included as part of your javascript dependencies. + Additionally, you will want to use the @use_datetimepicker decorator on the view using the widget + to ensure the CSS is loaded to the page properly. +

    +

    + The hqwebapp/js/bootstrap5/widgets module when loaded to a page will look for input fields + with the date-picker CSS class, and apply the Tempus Dominus plugin to that field. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.datepicker_widget %} + +

    + Advanced Date Picker +

    +

    + If you are interested in having a date-only picker widget with extra options, you can use Tempus Dominus without + the clock component. See the project's documentation + for additional guidance. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.date_only %} + +

    + Date & Time +

    +

    + If you want to choose a date and time together, the default state of the Tempus Dominus plugin is a good starting point. + See the project's documentation + for additional guidance. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.tempus_dominus %} + +

    + Time Only +

    +

    + If you only need to choose a time, you can use Tempus Dominus without the calendar option. + See the project's documentation + for additional guidance. +

    +
    + Bootstrap Migration Note: Older Bootstrap 3 pages will be using the old + bootstrap-timepicker plugin. The example below should be a good starting point to use as a drop-in + replacement for that widget. +
    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.time_only %} +

    + If you want a time-picker in 24-hour format, the example below provides a good starting point. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.time_only_24 %} + +

    + Date Range +

    +

    + If you need to select a range between two dates (start and end), you can use Tempus Dominus with the + dateRange option enabled. Previously, we used bootstrap-daterangepicker as + the plugin of choice. The example below provides a drop-in replacement for the default usage of + bootstrap-daterangepicker if you come across it in older Bootstrap 3 pages. + For additional guidance, see the documentation + for Tempus Dominus. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.date_range %} +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index 3a09b9e72f02..d7c752b02873 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -72,6 +72,8 @@ name="styleguide_molecules_inline_editing_b5"), url(r'^b5/molecules/feedback/$', bootstrap5.styleguide_molecules_feedback, name="styleguide_molecules_feedback_b5"), + url(r'^b5/molecules/dates-times/$', bootstrap5.styleguide_molecules_dates_times, + name="styleguide_molecules_dates_times_b5"), url(r'^b5/organisms/forms/$', bootstrap5.styleguide_organisms_forms, name="styleguide_organisms_forms_b5"), url(r'^b5/organisms/tables/$', bootstrap5.styleguide_organisms_tables, diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 185c2312bcdc..37415b71aff3 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -228,6 +228,22 @@ def styleguide_molecules_feedback(request): return render(request, 'styleguide/bootstrap5/molecules/feedback.html', context) +@use_bootstrap5 +def styleguide_molecules_dates_times(request): + context = get_navigation_context("styleguide_molecules_dates_times_b5") + context.update({ + 'examples': { + 'datepicker_widget': get_example_context('styleguide/bootstrap5/examples/datepicker_widget.html'), + 'date_only': get_example_context('styleguide/bootstrap5/examples/date_only.html'), + 'tempus_dominus': get_example_context('styleguide/bootstrap5/examples/tempus_dominus.html'), + 'date_range': get_example_context('styleguide/bootstrap5/examples/date_range.html'), + 'time_only': get_example_context('styleguide/bootstrap5/examples/time_only.html'), + 'time_only_24': get_example_context('styleguide/bootstrap5/examples/time_only_24.html'), + } + }) + return render(request, 'styleguide/bootstrap5/molecules/dates_times.html', context) + + @use_bootstrap5 def styleguide_organisms_forms(request): crispy_errors_form = ErrorsCrispyExampleForm({'full_name': 'Jon Jackson'}) From e70462f886fffdc348538bf5e0f49074edc49ac8 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 23 Jan 2024 21:16:06 +0100 Subject: [PATCH 48/67] cleanup migration guide text --- corehq/apps/styleguide/context.py | 2 +- .../bootstrap5/migration_guide.html | 47 +++++++++++++++---- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index ae2513f0c4f5..88cf8d55b659 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -19,7 +19,7 @@ def get_navigation_context(current_page): pages=[ Page("Introduction", 'styleguide_home_b5'), Page("Code Guidelines", 'styleguide_code_guidelines_b5'), - Page("Migration Guide", 'styleguide_migration_guide_b5'), + Page("Bootstrap Migration Guide", 'styleguide_migration_guide_b5'), ], ), NavigationGroup( diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html index 6e65bf738f94..b1ef628d6b10 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html @@ -1,7 +1,7 @@ {% extends 'styleguide/bootstrap5/base.html' %} {% block intro %} -

    Migration Guide

    +

    Bootstrap Migration Guide

    How to migrate an HQ application to the next Bootstrap version.

    @@ -12,15 +12,26 @@
    On this page

    {% endblock toc %} @@ -76,7 +87,7 @@

    -

    +

    Prepare Local Environment

    @@ -355,4 +366,24 @@

    a future (and hopefully less painful) challenge of the next Bootstrap Migration.

    +

    + Deep-Dive Resources +

    +

    + Here are the official migration guides from Bootstrap. These guides detail every change made + from the previous version to the next. The migration tool we created is meant to help automate the process + of pouring over these guides for each change over and over again. However, if you are curious + to read more, this is a good place to start. +

    + +

    + If you are interested in reading about how we initially spec'd the process of Migrating from Bootstrap 3 to 5 + on CommCare HQ, Dimagi folks are welcome to + review the initial Tech Spec here. +

    + + {% endblock content %} From 32963f003cb3747085a1413f4df4c64a3f67b7b7 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 23 Jan 2024 21:16:24 +0100 Subject: [PATCH 49/67] fix code guidelines toc --- .../styleguide/bootstrap5/code_guidelines.html | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_guidelines.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_guidelines.html index 6713503b4a2d..3b195e97c8e3 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_guidelines.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_guidelines.html @@ -12,15 +12,9 @@
    On this page

    {% endblock toc %} @@ -102,6 +96,7 @@

    Inline styling is generally a bad idea for the same reasons as in-page styling: one-off styling isn't good for consistency and often isn't semantic.

    +

    Handling Z-Index

    From 6034b8a0c27432d6258694b69c00759a6980cf94 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 23 Jan 2024 21:17:02 +0100 Subject: [PATCH 50/67] make sure all styleguide pages have use_bootstrap5 decorator --- corehq/apps/styleguide/views/bootstrap5.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 37415b71aff3..7efb7d04d531 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -33,30 +33,36 @@ from corehq.apps.styleguide.examples.bootstrap5.switch_form import SwitchDemoForm +@use_bootstrap5 def styleguide_home(request): return render(request, 'styleguide/bootstrap5/home.html', get_navigation_context("styleguide_home_b5")) +@use_bootstrap5 def styleguide_code_guidelines(request): return render(request, 'styleguide/bootstrap5/code_guidelines.html', get_navigation_context("styleguide_code_guidelines_b5")) +@use_bootstrap5 def styleguide_migration_guide(request): return render(request, 'styleguide/bootstrap5/migration_guide.html', get_navigation_context("styleguide_migration_guide_b5")) +@use_bootstrap5 def styleguide_atoms_accessibility(request): return render(request, 'styleguide/bootstrap5/atoms/accessibility.html', get_navigation_context("styleguide_atoms_accessibility_b5")) +@use_bootstrap5 def styleguide_atoms_typography(request): return render(request, 'styleguide/bootstrap5/atoms/typography.html', get_navigation_context("styleguide_atoms_typography_b5")) +@use_bootstrap5 def styleguide_atoms_colors(request): context = get_navigation_context("styleguide_atoms_colors_b5") context.update({ @@ -67,6 +73,7 @@ def styleguide_atoms_colors(request): return render(request, 'styleguide/bootstrap5/atoms/colors.html', context) +@use_bootstrap5 def styleguide_atoms_icons(request): context = get_navigation_context("styleguide_atoms_icons_b5") context.update({ @@ -76,6 +83,7 @@ def styleguide_atoms_icons(request): return render(request, 'styleguide/bootstrap5/atoms/icons.html', context) +@use_bootstrap5 def styleguide_molecules_buttons(request): context = get_navigation_context("styleguide_molecules_buttons_b5") context.update({ From 510c6105a40a88d093c298866ec9f26122998588 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 23 Jan 2024 21:17:22 +0100 Subject: [PATCH 51/67] add usage note for datatables --- .../styleguide/bootstrap5/organisms/tables.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/organisms/tables.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/organisms/tables.html index 499635615e3b..75c49ba22077 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/organisms/tables.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/organisms/tables.html @@ -232,6 +232,15 @@

    the standard Bootstrap table styles. Tables that require pagination but do not have advanced filtering capabilities of the Report views should use the Paginated Table style.

    + +
    + Important Usage Note: To use Datatables on a page, you will need to apply the + @use_datatables decorator to your view to ensure that the CSS (on all views) and javascript + (on non-requirejs views) are included. + If you are using requirejs, make sure that datatables.bootstrap is in your list of dependencies. + If you are using the fixedColumns extension, make sure that datatables.fixedColumns.bootstrap + is in your list of dependencies. +
    {% registerurl "styleguide_datatables_data" %} {% include 'styleguide/bootstrap5/code_example.html' with content=examples.datatables %} From d6303c8089617624788e9a421c5e089dbad92b1c Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 23 Jan 2024 21:18:08 +0100 Subject: [PATCH 52/67] add link to javascript guide on read the docs --- corehq/apps/styleguide/context.py | 1 + .../bootstrap5/javascript_guide.html | 31 +++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 ++ corehq/apps/styleguide/views/bootstrap5.py | 6 ++++ 4 files changed, 40 insertions(+) create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/javascript_guide.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 88cf8d55b659..c0df34eb0354 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -20,6 +20,7 @@ def get_navigation_context(current_page): Page("Introduction", 'styleguide_home_b5'), Page("Code Guidelines", 'styleguide_code_guidelines_b5'), Page("Bootstrap Migration Guide", 'styleguide_migration_guide_b5'), + Page("Javascript Guide", 'styleguide_javascript_guide_b5'), ], ), NavigationGroup( diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/javascript_guide.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/javascript_guide.html new file mode 100644 index 000000000000..85474484ba91 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/javascript_guide.html @@ -0,0 +1,31 @@ +{% extends 'styleguide/bootstrap5/base.html' %} + +{% block intro %} +

    Javascript Guide

    +

    + How to use javascript on HQ. +

    +{% endblock intro %} + +{% block toc %} +
    On this page
    +
    + +{% endblock toc %} + +{% block content %} +

    + Overview +

    +

    + This Style Guide aims to be a good review of the visual components of our front-end, which includes CSS and javascript + from various libraries. For a more in-depth review of our JavaScript structure, organization, and processes, + please refer to the + Dimagi JavaScript Guide. +

    +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index d7c752b02873..18ff354590ae 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -48,6 +48,8 @@ name="styleguide_code_guidelines_b5"), url(r'^b5/migration/$', bootstrap5.styleguide_migration_guide, name="styleguide_migration_guide_b5"), + url(r'^b5/javascript/$', bootstrap5.styleguide_javascript_guide, + name="styleguide_javascript_guide_b5"), url(r'^b5/atoms/accessibility/$', bootstrap5.styleguide_atoms_accessibility, name="styleguide_atoms_accessibility_b5"), url(r'^b5/atoms/typography/$', bootstrap5.styleguide_atoms_typography, diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 7efb7d04d531..5a671630b246 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -50,6 +50,12 @@ def styleguide_migration_guide(request): get_navigation_context("styleguide_migration_guide_b5")) +@use_bootstrap5 +def styleguide_javascript_guide(request): + return render(request, 'styleguide/bootstrap5/javascript_guide.html', + get_navigation_context("styleguide_javascript_guide_b5")) + + @use_bootstrap5 def styleguide_atoms_accessibility(request): return render(request, 'styleguide/bootstrap5/atoms/accessibility.html', From 383b6d1200cae04c1974e2894328d31b91184492 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Tue, 23 Jan 2024 21:18:47 +0100 Subject: [PATCH 53/67] add section on navigation --- corehq/apps/styleguide/context.py | 6 + .../images/navigation/breadcrumbs.png | Bin 0 -> 23822 bytes .../images/navigation/side_navigation.png | Bin 0 -> 90693 bytes .../images/navigation/top_navigation.png | Bin 0 -> 13952 bytes .../bootstrap5/code_html_non_working.html | 1 + .../bootstrap5/examples/navs_cards.html | 27 +++ .../bootstrap5/examples/navs_tabs.html | 29 ++++ .../bootstrap5/examples/page_header.html | 11 ++ .../bootstrap5/examples/page_title_block.html | 3 + .../bootstrap5/pages/navigation.html | 164 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 2 + corehq/apps/styleguide/views/bootstrap5.py | 14 ++ 12 files changed, 257 insertions(+) create mode 100644 corehq/apps/styleguide/static/styleguide/images/navigation/breadcrumbs.png create mode 100644 corehq/apps/styleguide/static/styleguide/images/navigation/side_navigation.png create mode 100644 corehq/apps/styleguide/static/styleguide/images/navigation/top_navigation.png create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/code_html_non_working.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/navs_cards.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/navs_tabs.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/page_header.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/page_title_block.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index c0df34eb0354..78f77cb50579 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -53,6 +53,12 @@ def get_navigation_context(current_page): Page("Tables", 'styleguide_organisms_tables_b5'), ], ), + NavigationGroup( + name="Pages", + pages=[ + Page("Navigation", 'styleguide_pages_navigation_b5'), + ], + ), ], } diff --git a/corehq/apps/styleguide/static/styleguide/images/navigation/breadcrumbs.png b/corehq/apps/styleguide/static/styleguide/images/navigation/breadcrumbs.png new file mode 100644 index 0000000000000000000000000000000000000000..35c76ea5d6bba1bb16f3c749d4f90a32918b58ec GIT binary patch literal 23822 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 ZSi<|8&QD+U=UfWm-;2sX^F%&;`5%o*{PF+* literal 0 HcmV?d00001 diff --git a/corehq/apps/styleguide/static/styleguide/images/navigation/top_navigation.png b/corehq/apps/styleguide/static/styleguide/images/navigation/top_navigation.png new file mode 100644 index 0000000000000000000000000000000000000000..a54e32d19e557ee22a8dfcf220ca11af8f7f475b GIT binary patch literal 13952 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 literal 0 HcmV?d00001 diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_html_non_working.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_html_non_working.html new file mode 100644 index 000000000000..c41f820b66fa --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_html_non_working.html @@ -0,0 +1 @@ +{% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content language="HTML" %} \ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/navs_cards.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/navs_cards.html new file mode 100644 index 000000000000..35c6f4eb59a7 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/navs_cards.html @@ -0,0 +1,27 @@ +
    +
    +
    Winter
    + December, January, February +
    +
    + +
    +
    +
    Spring
    + March, April, May +
    +
    + +
    +
    +
    Summer
    + June, July, August +
    +
    + +
    +
    +
    Autumn
    + September, October, November +
    +
    diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/navs_tabs.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/navs_tabs.html new file mode 100644 index 000000000000..966131cb4eb2 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/navs_tabs.html @@ -0,0 +1,29 @@ + + +
    +
    + December, January, February +
    +
    + March, April, May +
    +
    + June, July, August +
    +
    + September, October, November +
    +
    diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/page_header.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/page_header.html new file mode 100644 index 000000000000..d183071baf6e --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/page_header.html @@ -0,0 +1,11 @@ +

    + Mobile Workers +

    +

    + Mobile workers' activity and form submissions can be monitored in the Reports section of this CommCare HQ project space. +
    + Read more about managing mobile workers on our + + Help Site + . +

    diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/page_title_block.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/page_title_block.html new file mode 100644 index 000000000000..334dd97bde57 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/page_title_block.html @@ -0,0 +1,3 @@ +{% block page_title %} + {{ current_page.title }} +{% endblock %} diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html new file mode 100644 index 000000000000..1c2e2bfcd3db --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html @@ -0,0 +1,164 @@ +{% extends 'styleguide/bootstrap5/base.html' %} +{% load hq_shared_tags %} + +{% block intro %} +

    Navigation

    +

    + Users should always know where they are and how to get back where they came from. +

    +{% endblock intro %} + +{% block toc %} +
    On this page
    +
    + +{% endblock toc %} + +{% block content %} +

    Overview

    +

    + These standard navigation elements should be present on almost every page. The following assumes + that the page descends from hqwebapp/bootstrap5/base_section.html, which virtually all pages should. +

    + +

    + Top Navigation +

    +
    +
    + top navigation example +
    +
    +

    + The top navigation should always be visible to users. Individual tabs are defined in + tabclasses.py. + Which tab is highlighted depends on the url_prefix_formats defined for each tab. Which items + appear in a tab's dropdown is determined by dropdown_items. +

    + +

    + Side Navigation +

    +
    +
    + top navigation example +
    +
    +

    + The side navigation appears almost everywhere. Major exceptions are the dashboard, + which has no navigation, and app manager, which has a custom sidebar corresponding to the app's structure. + Other pages should almost certainly have a sidebar. +

    +

    + The sidebar is also defined in + tabclasses.py, + controlled by the sidebar_items class methods. +

    +

    + Temporary sub-items that appear only when on a specific page, such as the "Create Form Data Export" item that + appears under the main "Export Form Data" item only when you're creating a new export, can be added using + the subpages property. +

    +

    + Dynamic item names, such as displaying the username when editing a web user, can be enabled by passing a + function to the menu item's title. +

    + + +
    +
    + top navigation example +
    +
    +

    + Breadcrumbs are defined by the parent_pages class method in a class-based view. + Standard pages should have a breadcrumb for the top nav section (e.g., "Data"), for the left sidebar section + if there is one (e.g., "Edit Data"), and for the page itself. Multi-step workflows such as case import should + also be reflected in breadcrumbs. All items in the breadcrumbs should be links, except for the last + (the current page). +

    +

    + A few pages override the page_breadcrumbs block defined in the template: + hqwebapp/bootstrap5/base_section.html. This should only be done in exceptional circumstances. +

    +
    + Usage Notes: See this example for + how to implement breadcrumbs on a class-based view. +
    + +

    + Page Headers +

    +

    + A page header at the top of the page's main content helps the user stay oriented, and this is a good place to + briefly introduce the user to the page and link to documentation. +

    +

    + This is an area where the technical implementation isn't well-standardized. When possible, make sure you + page_title attribute is defined if using a class-based view + (see this example) + or passed into the template context if using a functional view. +

    +

    + For a class-based view, you would then (ideally) set the page_title block this way: + {% include 'styleguide/bootstrap5/code_html_non_working.html' with content=examples.page_title_block %} +

    +

    + Otherwise, you can set the page header manually with the following bit of HTML at the beginning of + {% verbatim %}{% block page_content %}{% endverbatim %}: +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.page_header %} + +

    + In-page Navigation +

    +

    + If a page has multiple sections, you have a few options to visually separate them: +

    +
      +
    • + Split into multiple pages. +
    • +
    • + Set each section up as a tab (see docs). + Please avoid using pills for navigation as they look similar to + select toggles used in forms. +
    • +
    • + Enclose each section in a card (see docs). +
    • +
    + +

    + Below is an example of sectioning a page with tabs. This is the most preferred method of sectioning a page in HQ. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.navs_tabs %} + +

    + Below is an example of sectioning a page with cards. +

    + {% include 'styleguide/bootstrap5/code_example.html' with content=examples.navs_cards %} +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index 18ff354590ae..4e9a6b84d12a 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -80,4 +80,6 @@ name="styleguide_organisms_forms_b5"), url(r'^b5/organisms/tables/$', bootstrap5.styleguide_organisms_tables, name="styleguide_organisms_tables_b5"), + url(r'^b5/pages/navigation/$', bootstrap5.styleguide_pages_navigation, + name="styleguide_pages_navigation_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 5a671630b246..71a208085ab1 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -310,3 +310,17 @@ def styleguide_organisms_tables(request): }, }) return render(request, 'styleguide/bootstrap5/organisms/tables.html', context) + + +@use_bootstrap5 +def styleguide_pages_navigation(request): + context = get_navigation_context("styleguide_pages_navigation_b5") + context.update({ + 'examples': { + 'page_title_block': get_example_context('styleguide/bootstrap5/examples/page_title_block.html'), + 'page_header': get_example_context('styleguide/bootstrap5/examples/page_header.html'), + 'navs_cards': get_example_context('styleguide/bootstrap5/examples/navs_cards.html'), + 'navs_tabs': get_example_context('styleguide/bootstrap5/examples/navs_tabs.html'), + }, + }) + return render(request, 'styleguide/bootstrap5/pages/navigation.html', context) From 2fc29f76898fe8159543711a56d7566407d1a750 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 25 Jan 2024 14:22:36 +0100 Subject: [PATCH 54/67] update code for display widget --- corehq/apps/styleguide/context.py | 1 + .../{code_html_non_working.html => code_display.html} | 2 +- .../templates/styleguide/bootstrap5/pages/navigation.html | 2 +- corehq/apps/styleguide/views/bootstrap5.py | 6 +++++- 4 files changed, 8 insertions(+), 3 deletions(-) rename corehq/apps/styleguide/templates/styleguide/bootstrap5/{code_html_non_working.html => code_display.html} (51%) diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 78f77cb50579..9ab6877517ba 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -7,6 +7,7 @@ Color = namedtuple('Color', 'slug hex') CrispyFormsDemo = namedtuple('CrispyFormsDemo', 'form code') CrispyFormsWithJsDemo = namedtuple('CrispyFormsWithJsDemo', 'form code_python code_js') +CodeForDisplay = namedtuple('CodeForDisplay', 'code language') ThemeColor = namedtuple('ThemeColor', 'slug hex theme_equivalent') diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_html_non_working.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html similarity index 51% rename from corehq/apps/styleguide/templates/styleguide/bootstrap5/code_html_non_working.html rename to corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html index c41f820b66fa..c2f5e89f5298 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_html_non_working.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html @@ -1 +1 @@ -{% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content language="HTML" %} \ No newline at end of file +{% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content.code language=content.language %} diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html index 1c2e2bfcd3db..4c541df39757 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html @@ -120,7 +120,7 @@

    For a class-based view, you would then (ideally) set the page_title block this way: - {% include 'styleguide/bootstrap5/code_html_non_working.html' with content=examples.page_title_block %} + {% include 'styleguide/bootstrap5/code_display.html' with content=examples.page_title_block %}

    Otherwise, you can set the page header manually with the following bit of HTML at the beginning of diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 71a208085ab1..d8a3c7ed778b 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -13,6 +13,7 @@ CrispyFormsWithJsDemo, get_js_example_context, get_gradient_colors, + CodeForDisplay, ) from corehq.apps.styleguide.examples.bootstrap5.checkbox_form import CheckboxDemoForm from corehq.apps.styleguide.examples.bootstrap5.crispy_forms_basic import BasicCrispyExampleForm @@ -317,7 +318,10 @@ def styleguide_pages_navigation(request): context = get_navigation_context("styleguide_pages_navigation_b5") context.update({ 'examples': { - 'page_title_block': get_example_context('styleguide/bootstrap5/examples/page_title_block.html'), + 'page_title_block': CodeForDisplay( + code=get_example_context('styleguide/bootstrap5/examples/page_title_block.html'), + language="HTML", + ), 'page_header': get_example_context('styleguide/bootstrap5/examples/page_header.html'), 'navs_cards': get_example_context('styleguide/bootstrap5/examples/navs_cards.html'), 'navs_tabs': get_example_context('styleguide/bootstrap5/examples/navs_tabs.html'), From 44307d3c87e7190efd0af57937a2fc43c4ab18e2 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 25 Jan 2024 14:24:29 +0100 Subject: [PATCH 55/67] rename to get_python_example_context --- corehq/apps/styleguide/context.py | 2 +- corehq/apps/styleguide/views/bootstrap5.py | 34 +++++++++++----------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index 9ab6877517ba..e9b930c1f833 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -267,7 +267,7 @@ def get_example_context(filename): return content.read() -def get_crispy_forms_context(filename): +def get_python_example_context(filename): examples = os.path.join(os.path.dirname(__file__), 'examples', 'bootstrap5') with open(os.path.join(examples, filename), 'r', encoding='utf-8') as content: return content.read() diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index d8a3c7ed778b..8677c7667ebe 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -8,7 +8,7 @@ get_common_icons, get_custom_icons, get_example_context, - get_crispy_forms_context, + get_python_example_context, CrispyFormsDemo, CrispyFormsWithJsDemo, get_js_example_context, @@ -114,47 +114,47 @@ def styleguide_molecules_selections(request): 'examples': { 'toggles': get_example_context('styleguide/bootstrap5/examples/toggles.html'), 'toggles_crispy': CrispyFormsDemo( - SelectToggleDemoForm(), get_crispy_forms_context('select_toggle_form.py'), + SelectToggleDemoForm(), get_python_example_context('select_toggle_form.py'), ), 'select2_manual': get_example_context('styleguide/bootstrap5/examples/select2_manual.html'), 'select2_manual_crispy': CrispyFormsWithJsDemo( form=Select2ManualDemoForm(), - code_python=get_crispy_forms_context('select2_manual_form.py'), + code_python=get_python_example_context('select2_manual_form.py'), code_js=get_js_example_context('select2_manual_crispy.js'), ), 'select2_css_class': get_example_context('styleguide/bootstrap5/examples/select2_css_class.html'), 'select2_css_class_multiple': get_example_context( 'styleguide/bootstrap5/examples/select2_css_class_multiple.html'), 'select2_css_class_crispy': CrispyFormsDemo( - Select2CssClassDemoForm(), get_crispy_forms_context('select2_css_class_form.py'), + Select2CssClassDemoForm(), get_python_example_context('select2_css_class_form.py'), ), 'select2_ko_dynamic': get_example_context('styleguide/bootstrap5/examples/select2_ko_dynamic.html'), 'select2_ko_dynamic_crispy': CrispyFormsWithJsDemo( form=Select2DynamicKoForm(), - code_python=get_crispy_forms_context('select2_dynamic_ko_form.py'), + code_python=get_python_example_context('select2_dynamic_ko_form.py'), code_js=get_js_example_context('select2_dynamic_ko_crispy.js'), ), 'select2_ko_static': get_example_context('styleguide/bootstrap5/examples/select2_ko_static.html'), 'select2_ko_static_crispy': CrispyFormsWithJsDemo( form=Select2StaticKoForm(), - code_python=get_crispy_forms_context('select2_static_ko_form.py'), + code_python=get_python_example_context('select2_static_ko_form.py'), code_js=get_js_example_context('select2_static_ko_crispy.js'), ), 'select2_ko_autocomplete': get_example_context( 'styleguide/bootstrap5/examples/select2_ko_autocomplete.html'), 'select2_ko_autocomplete_crispy': CrispyFormsWithJsDemo( form=Select2AutocompleteKoForm(), - code_python=get_crispy_forms_context('select2_autocomplete_ko_form.py'), + code_python=get_python_example_context('select2_autocomplete_ko_form.py'), code_js=get_js_example_context('select2_autocomplete_ko_crispy.js'), ), 'multiselect': get_example_context('styleguide/bootstrap5/examples/multiselect.html'), 'multiselect_crispy': CrispyFormsWithJsDemo( form=MultiselectDemoForm(), - code_python=get_crispy_forms_context('multiselect_form.py'), + code_python=get_python_example_context('multiselect_form.py'), code_js=get_js_example_context('multiselect_crispy.js'), ), 'select2_ajax_crispy': CrispyFormsDemo( - Select2AjaxDemoForm(), get_crispy_forms_context('select2_ajax_form.py'), + Select2AjaxDemoForm(), get_python_example_context('select2_ajax_form.py'), ), } }) @@ -172,10 +172,10 @@ def styleguide_molecules_checkboxes(request): 'checkbox_horizontal_form': get_example_context( 'styleguide/bootstrap5/examples/checkbox_horizontal_form.html'), 'checkbox_crispy': CrispyFormsDemo( - CheckboxDemoForm(), get_crispy_forms_context('checkbox_form.py'), + CheckboxDemoForm(), get_python_example_context('checkbox_form.py'), ), 'switch_crispy': CrispyFormsDemo( - SwitchDemoForm(), get_crispy_forms_context('switch_form.py'), + SwitchDemoForm(), get_python_example_context('switch_form.py'), ), } }) @@ -267,25 +267,25 @@ def styleguide_organisms_forms(request): context.update({ 'examples': { 'crispy_basic': CrispyFormsDemo( - BasicCrispyExampleForm(), get_crispy_forms_context('crispy_forms_basic.py'), + BasicCrispyExampleForm(), get_python_example_context('crispy_forms_basic.py'), ), 'crispy_errors': CrispyFormsDemo( - crispy_errors_form, get_crispy_forms_context('crispy_forms_errors.py'), + crispy_errors_form, get_python_example_context('crispy_forms_errors.py'), ), 'crispy_disabled_fields': CrispyFormsDemo( - DisabledFieldsExampleForm(), get_crispy_forms_context('disabled_fields.py'), + DisabledFieldsExampleForm(), get_python_example_context('disabled_fields.py'), ), 'crispy_placeholder_help_text': CrispyFormsDemo( - PlaceholderHelpTextExampleForm(), get_crispy_forms_context('placeholder_help_text.py'), + PlaceholderHelpTextExampleForm(), get_python_example_context('placeholder_help_text.py'), ), 'crispy_knockout': CrispyFormsWithJsDemo( form=KnockoutCrispyExampleForm(), - code_python=get_crispy_forms_context('crispy_forms_knockout.py'), + code_python=get_python_example_context('crispy_forms_knockout.py'), code_js=get_js_example_context('crispy_forms_knockout.js'), ), 'crispy_knockout_validation': CrispyFormsWithJsDemo( form=KnockoutValidationCrispyExampleForm(), - code_python=get_crispy_forms_context('crispy_forms_knockout_validation.py'), + code_python=get_python_example_context('crispy_forms_knockout_validation.py'), code_js=get_js_example_context('crispy_forms_knockout_validation.js'), ), 'basic_form': get_example_context('styleguide/bootstrap5/examples/basic_form.html'), From 8081c5fec1372070752643d226b109779f7ed6a1 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 18:31:46 +0100 Subject: [PATCH 56/67] add utilities for helping to structure necessary template context for functional views (explained in style guide) --- corehq/apps/hqwebapp/context.py | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 corehq/apps/hqwebapp/context.py diff --git a/corehq/apps/hqwebapp/context.py b/corehq/apps/hqwebapp/context.py new file mode 100644 index 000000000000..6492d3018bd3 --- /dev/null +++ b/corehq/apps/hqwebapp/context.py @@ -0,0 +1,35 @@ +from collections import namedtuple + +Section = namedtuple('Section', 'page_name url') +ParentPage = namedtuple('ParentPage', 'title url') + + +def get_page_context(page_title, page_url, page_name=None, parent_pages=None, domain=None, section=None): + """This sets up the page context for functional views inheriting from the following base templates: + hqwebapp/{bootstrap_version}/base_page.html + hqwebapp/{bootstrap_version}/base_section.html + note: do not inherit from two_column.html, unless you have a very specific use-case + for navigation, see the style guide section on Navigation + + :param page_title: an instance of ``str``, title of the page...inserted into tags + :param page_url: an instance of ``str``, often reverse("urlname") or reverse("urlname", args=[...]) + :param page_name: an instance of ``str``, human-visible page name, defaults to page_title + :param parent_pages: ``None`` or a ``list`` of ``ParentPage`` + :param domain: an instance of ``str``, the domain slug + :param section: an instance of the ``Section`` context + """ + page_name = page_name or page_title + parent_pages = parent_pages or [] + base_context = { + 'current_page': { + 'page_name': page_name, + 'title': page_title, + 'url': page_url, + 'parents': parent_pages, + }, + } + if domain: + base_context['domain'] = domain + if section: + base_context['section'] = section + return base_context From f35f082fcfef8bc659f8eb8a877af5708ff86abc Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 18:34:44 +0100 Subject: [PATCH 57/67] fix url prefix in old styleguide tabs --- corehq/apps/styleguide/tabs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corehq/apps/styleguide/tabs.py b/corehq/apps/styleguide/tabs.py index f07e86262133..03c24b5f5207 100644 --- a/corehq/apps/styleguide/tabs.py +++ b/corehq/apps/styleguide/tabs.py @@ -32,7 +32,7 @@ class SimpleCrispyFormSGExample(BaseSGTab): title = gettext_noop("Simple Crispy Form") view = DefaultSimpleCrispyFormSectionView.urlname - url_prefix_formats = ('/styleguide/bootstrap3/docs/simple_crispy/',) + url_prefix_formats = ('/styleguide/docs/simple_crispy/',) @property @memoized From bbc559acbf46922950c5a7c2ca23adfbacb8e575 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 18:36:12 +0100 Subject: [PATCH 58/67] add styleguide section on views --- corehq/apps/styleguide/context.py | 1 + .../examples/bootstrap5/class_view.py | 64 ++++++++ .../examples/bootstrap5/example_urls.py | 29 ++++ .../examples/bootstrap5/functional_view.py | 68 ++++++++ .../styleguide/examples/bootstrap5/tabs.py | 91 ++++++++++ .../examples/simple_centered_page.html | 9 + .../bootstrap5/examples/simple_section.html | 9 + .../examples/simple_section_parent.html | 12 ++ .../styleguide/bootstrap5/pages/views.html | 155 ++++++++++++++++++ corehq/apps/styleguide/urls.py | 4 + corehq/apps/styleguide/views/bootstrap5.py | 30 ++++ 11 files changed, 472 insertions(+) create mode 100644 corehq/apps/styleguide/examples/bootstrap5/class_view.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/example_urls.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/functional_view.py create mode 100644 corehq/apps/styleguide/examples/bootstrap5/tabs.py create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_centered_page.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_section.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_section_parent.html create mode 100644 corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/views.html diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index e9b930c1f833..a1a396295cba 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -58,6 +58,7 @@ def get_navigation_context(current_page): name="Pages", pages=[ Page("Navigation", 'styleguide_pages_navigation_b5'), + Page("Views", 'styleguide_pages_views_b5'), ], ), ], diff --git a/corehq/apps/styleguide/examples/bootstrap5/class_view.py b/corehq/apps/styleguide/examples/bootstrap5/class_view.py new file mode 100644 index 000000000000..f6196bde8777 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/class_view.py @@ -0,0 +1,64 @@ +from django.urls import reverse +from django.utils.decorators import method_decorator +from django.utils.translation import gettext_lazy + +from corehq.apps.domain.decorators import login_required +from corehq.apps.hqwebapp.context import ParentPage +from corehq.apps.hqwebapp.decorators import use_bootstrap5 +from corehq.apps.hqwebapp.views import BasePageView, BaseSectionPageView + + +@method_decorator(login_required, name='dispatch') +@method_decorator(use_bootstrap5, name='dispatch') +class ExampleCenteredPageView(BasePageView): + urlname = "example_centered_page_b5" + page_title = gettext_lazy("Centered Page Example") + template_name = "styleguide/bootstrap5/examples/simple_centered_page.html" + + @property + def page_url(self): + return reverse(self.urlname) + + +# Typically, section pages will all inherit from one "base section view" that +# defines the general page_url format, section_url, section_name, and the minimum +# required permissions decorators for that page. +@method_decorator(login_required, name='dispatch') +@method_decorator(use_bootstrap5, name='dispatch') +class BaseExampleView(BaseSectionPageView): + section_name = gettext_lazy("Example Views") + + @property + def page_url(self): + return reverse(self.urlname) + + @property + def section_url(self): + # This can be another page relevant to the section. + # Since there are only two pages in this example section, + # `ExampleParentSectionPageView.urlname` is used. + return reverse(ExampleParentSectionPageView.urlname) + + +class ExampleParentSectionPageView(BaseExampleView): + urlname = "example_section_parent_b5" + page_title = gettext_lazy("Section Page Example") + template_name = "styleguide/bootstrap5/examples/simple_section_parent.html" + + @property + def page_context(self): + return { + "child_page_url": reverse(ExampleChildSectionPageView.urlname), + } + + +class ExampleChildSectionPageView(BaseExampleView): + urlname = "example_section_b5" + page_title = gettext_lazy("A Detail Page (Section Example)") + template_name = "styleguide/bootstrap5/examples/simple_section.html" + + @property + def parent_pages(self): + return [ + ParentPage(ExampleParentSectionPageView.page_title, reverse(ExampleParentSectionPageView.urlname)), + ] diff --git a/corehq/apps/styleguide/examples/bootstrap5/example_urls.py b/corehq/apps/styleguide/examples/bootstrap5/example_urls.py new file mode 100644 index 000000000000..c3bd5c521999 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/example_urls.py @@ -0,0 +1,29 @@ +from django.conf.urls import re_path as url + +from corehq.apps.styleguide.examples.bootstrap5.class_view import ( + ExampleCenteredPageView, + ExampleChildSectionPageView, + ExampleParentSectionPageView, +) +from corehq.apps.styleguide.examples.bootstrap5.functional_view import ( + simple_redirect_view, + example_centered_page_view, + example_section_page_view, + example_parent_page_view, +) + +urlpatterns = [ + url(r'^$', simple_redirect_view, name="example_views_b5"), + url(r'^centered_page/$', ExampleCenteredPageView.as_view(), + name=ExampleCenteredPageView.urlname), + url(r'^centered_page_functional/$', example_centered_page_view, + name="example_centered_page_functional_b5"), + url(r'^example_section_functional/$', example_section_page_view, + name="example_section_functional_b5"), + url(r'^example_section/$', ExampleChildSectionPageView.as_view(), + name=ExampleChildSectionPageView.urlname), + url(r'^example_parent_functional/$', example_parent_page_view, + name="example_parent_page_functional_b5"), + url(r'^example_parent/$', ExampleParentSectionPageView.as_view(), + name=ExampleParentSectionPageView.urlname), +] diff --git a/corehq/apps/styleguide/examples/bootstrap5/functional_view.py b/corehq/apps/styleguide/examples/bootstrap5/functional_view.py new file mode 100644 index 000000000000..884f5cc18d76 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/functional_view.py @@ -0,0 +1,68 @@ +from django.http import HttpResponseRedirect, JsonResponse +from django.shortcuts import render +from django.views.decorators.http import require_POST +from django.urls import reverse +from django.utils.translation import gettext as _ + +from corehq.apps.domain.decorators import login_required +from corehq.apps.hqwebapp.context import get_page_context, Section, ParentPage +from corehq.apps.hqwebapp.decorators import use_bootstrap5 + + +@require_POST # often, other decorators will go here too +def example_data_view(request): # any additional arguments from the URL go here + # do something with the request data + return JsonResponse({ + "success": True, + }) + + +def simple_redirect_view(request): + # do something with the request + return HttpResponseRedirect(reverse("example_centered_page_functional_b5")) # redirect to a different page + + +@login_required +@use_bootstrap5 +def example_centered_page_view(request): + context = get_page_context( + _("Centered Page Example"), + reverse("example_centered_page_functional_b5"), + ) + return render(request, 'styleguide/bootstrap5/examples/simple_centered_page.html', context) + + +@login_required # often this is login_and_domain_required +@use_bootstrap5 +def example_section_page_view(request): + context = get_page_context( + _("A Detail Page (Section Example)"), + reverse("example_section_functional_b5"), + section=Section( + _("Example Views"), + reverse("example_section_functional_b5"), + ), + parent_pages=[ + ParentPage( + _("Section Page Example"), + reverse("example_parent_page_functional_b5") + ), + ] + ) + return render(request, 'styleguide/bootstrap5/examples/simple_section.html', context) + + +@login_required +@use_bootstrap5 +def example_parent_page_view(request): + context = get_page_context( + _("Section Page Example"), + reverse("example_parent_page_functional_b5"), + section=Section( + _("Example Views"), + reverse("example_section_functional_b5"), + ), + ) + # this is not a standard template context variable + context['child_page_url'] = reverse("example_section_functional_b5") + return render(request, 'styleguide/bootstrap5/examples/simple_section_parent.html', context) diff --git a/corehq/apps/styleguide/examples/bootstrap5/tabs.py b/corehq/apps/styleguide/examples/bootstrap5/tabs.py new file mode 100644 index 000000000000..9fb2567d6046 --- /dev/null +++ b/corehq/apps/styleguide/examples/bootstrap5/tabs.py @@ -0,0 +1,91 @@ +from django.urls import reverse +from django.utils.translation import gettext_lazy, gettext as _ + +from memoized import memoized + +from corehq.apps.styleguide.examples.bootstrap5.class_view import ( + ExampleCenteredPageView, + ExampleParentSectionPageView, + ExampleChildSectionPageView, +) +from corehq.tabs.uitab import UITab +from corehq.tabs.utils import dropdown_dict + + +class StyleguideExamplesTab(UITab): + title = gettext_lazy("Style Guide") + view = 'example_centered_page_b5' + + url_prefix_formats = ('/styleguide/b5/example/',) + + @property + def _is_viewable(self): + examples_url = reverse("example_views_b5") + return self.request_path.startswith(examples_url) + + @property + def dropdown_items(self): + submenu_context = [ + dropdown_dict(_("Class-Based Examples"), is_header=True), + dropdown_dict( + _("Basic Page"), + url=reverse(ExampleCenteredPageView.urlname), + ), + dropdown_dict( + _("Section Page"), + url=reverse(ExampleChildSectionPageView.urlname), + ), + dropdown_dict(_("Functional Examples"), is_header=True), + dropdown_dict( + _("Basic Page"), + url=reverse("example_centered_page_functional_b5"), + ), + dropdown_dict( + _("Section Page"), + url=reverse("example_section_functional_b5"), + ), + self.divider, + dropdown_dict( + _("Style Guide"), + url=reverse("styleguide_home_b5"), + ), + ] + return submenu_context + + @property + @memoized + def sidebar_items(self): + return [ + (_("Class-Based Views"), [ + { + 'title': ExampleCenteredPageView.page_title, + 'url': reverse(ExampleCenteredPageView.urlname), + }, + { + 'title': ExampleParentSectionPageView.page_title, + 'url': reverse(ExampleParentSectionPageView.urlname), + "subpages": [ + { + 'title': ExampleChildSectionPageView.page_title, + 'urlname': ExampleChildSectionPageView.urlname, + }, + ], + }, + ]), + (_("Functional Views"), [ + { + 'title': _("Centered Page Example"), + 'url': reverse("example_centered_page_functional_b5"), + }, + { + 'title': _("Section Page Example"), + 'url': reverse("example_parent_page_functional_b5"), + "subpages": [ + { + 'title': _("A Detail Page (Section Example)"), + 'urlname': "example_section_functional_b5", + }, + ], + }, + ]), + ] diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_centered_page.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_centered_page.html new file mode 100644 index 000000000000..f90594f658bf --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_centered_page.html @@ -0,0 +1,9 @@ +{% extends "hqwebapp/bootstrap5/base_page.html" %} +{% load i18n %} + +{% block page_content %} +

    + This is an example page extending the + hqwebapp/bootstrap5/base_page.html template. +

    +{% endblock %} \ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_section.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_section.html new file mode 100644 index 000000000000..488d65347453 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_section.html @@ -0,0 +1,9 @@ +{% extends "hqwebapp/bootstrap5/base_section.html" %} +{% load i18n %} + +{% block page_content %} +

    + This is an example page extending the + hqwebapp/bootstrap5/base_section.html template. +

    +{% endblock %} \ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_section_parent.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_section_parent.html new file mode 100644 index 000000000000..0f93b22e62e4 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/examples/simple_section_parent.html @@ -0,0 +1,12 @@ +{% extends "hqwebapp/bootstrap5/base_section.html" %} +{% load i18n %} + +{% block page_content %} +

    + This is an example page extending the hqwebapp/bootstrap5/base_section.html template. +

    +

    + You can see the parent / child nested page behavior that will be shown in the breadcrumbs above + by visiting this page. +

    +{% endblock %} \ No newline at end of file diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/views.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/views.html new file mode 100644 index 000000000000..2afbe1d4f504 --- /dev/null +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/views.html @@ -0,0 +1,155 @@ +{% extends 'styleguide/bootstrap5/base.html' %} +{% load hq_shared_tags %} + +{% block intro %} +

    Using Views

    +

    + Views with any sort of UI on HQ are mostly class-based, while functional views are largely used for data. +

    +{% endblock intro %} + +{% block toc %} +
    On this page
    +
    + +{% endblock toc %} + +{% block content %} +

    Overview

    +

    + In Django there are two approaches to creating a view: class-based views and functional views. +

    +

    + Class-based views (CBV) are the most commonly chosen view for rendering a user-facing UIs on HQ. + This is due to the ease of setting up the template context in the view inheritance, as well as the application of + permissions-related decorators that cover an entire section or subclass of pages. + Very rarely are class-based views chosen for returning data. +

    +

    + Functional views are used mainly for data views (for instance returning a JsonResponse), + POSTing data, or as redirect views. Sometimes functional views are used to render templates, + but this is not very common on CommCare HQ and is not recommended unless the use case requires it. +

    +

    + Templates +

    +

    + Regardless of whether a view is class-based or functional, if the view returns a template it must + extend one of the two types of templates below. +

    +

    + Centered Page +

    +

    + A Centered Page is generally a very simple single-page UI. + This is usually reserved for login and registration, error pages, or a user's list of projects. These are one-off + pages that don't fit into a collection of views or navigational area. +

    +

    + All templates that form a centered page extend the hqwebapp/bootstrap5/base_page.html template, + or extends a template that eventually extends the base_page.html template. +

    + {% include 'styleguide/bootstrap5/code_display.html' with content=examples.simple_centered_page %} +

    + Section (Two-Column) Page +

    +

    + A Section Page is a page that has left-hand side navigation + and breadcrumbs. There is an overall "section" that ties all the pages shown in the left-hand navigation together. + Examples are Reports and Project Settings sections of a project space. +

    + {% include 'styleguide/bootstrap5/code_display.html' with content=examples.simple_section %} +

    + Template Context +

    +

    + The template context is a dictionary passed to the template that defines all the variables the template needs + to render that page. In class-based views, there is a lot of guidance + built into the CBV structure that ensures no important pieces of the template context are missed. +

    +

    + If you see views where the breadcrumbs are partially rendered or the page header looks a bit different + from the other pages, it's likely that view did not have its template context properly set up. +

    +

    + With functional views, it is very easy to return a poorly formatted template context that causes the resulting + page to look a bit strange. The developer might be tempted to override page_header or navigation + blocks from the extending templates. Please do not rush to do this! First, explore whether the template context is + missing any information. We've created some helper methods corehq.apps.hqwebapp.context to help + structure the template context if you are working with a functional view. This usage is shown in the functional + view examples below. +

    +
    + It's always recommended that you use a class-based view to render a template, + unless you have a very good reason for using a functional view. +
    + +

    + Class-Based Views +

    +

    + In comparison with functional views, class-based views help keep the UI standardized. As you will see in the + examples below, the template context is conveniently taken care of by the class structure. This template context + helps make sure that all the necessary pieces of information are provided to render breadcrumbs, navigation, + page titles, and title tags properly in the base_page.html and + base_section.html templates. +

    + +

    + Below is an example of a + centered page and a + section page. The templates are covered in the Templates section above. +

    + + {% include 'styleguide/bootstrap5/code_display.html' with content=examples.class_view %} + +

    + We won't dive into great detail about the implementation here, as there is a lot of information about + using Class-based views on CommCare HQ in our Read-the-docs. +

    +

    + This page serves as a quick reference and a way to see + a working example. It's also a good place to start to inspect any front end changes to templates in the event + of another Bootstrap upgrade. +

    + +

    + Functional Views +

    +

    + Below are several examples of functional views. The views rendering templates make use of the context helper + get_page_context found in corehq.apps.hqwebapp.context to help structure the template + context needed to correctly render templates extending the base_page.html and + base_section.html templates. +

    +

    + You can also see working examples of a + Function-Based Centered Page and a + Function-Based Section Page. +

    + {% include 'styleguide/bootstrap5/code_display.html' with content=examples.functional_view %} + +

    + Mapping Urls to Views +

    +

    + Below is an example of how the class-based and functional-view examples above are specified in a + urlpattern. +

    + {% include 'styleguide/bootstrap5/code_display.html' with content=examples.example_urls %} +{% endblock content %} diff --git a/corehq/apps/styleguide/urls.py b/corehq/apps/styleguide/urls.py index 4e9a6b84d12a..a2ced839871a 100644 --- a/corehq/apps/styleguide/urls.py +++ b/corehq/apps/styleguide/urls.py @@ -1,5 +1,6 @@ from django.conf.urls import include, re_path as url +from corehq.apps.styleguide.examples.bootstrap5.example_urls import urlpatterns as example_urlpatterns from corehq.apps.styleguide.views import ( AtomsStyleGuideView, MainStyleGuideView, @@ -44,6 +45,7 @@ name="styleguide_datatables_data"), url(r'^b5/data/paginated_table_data$', bootstrap5_data.paginated_table_data, name="styleguide_paginated_table_data"), + url(r'^b5/example/', include(example_urlpatterns)), url(r'^b5/guidelines/$', bootstrap5.styleguide_code_guidelines, name="styleguide_code_guidelines_b5"), url(r'^b5/migration/$', bootstrap5.styleguide_migration_guide, @@ -82,4 +84,6 @@ name="styleguide_organisms_tables_b5"), url(r'^b5/pages/navigation/$', bootstrap5.styleguide_pages_navigation, name="styleguide_pages_navigation_b5"), + url(r'^b5/pages/views/$', bootstrap5.styleguide_pages_views, + name="styleguide_pages_views_b5"), ] diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index 8677c7667ebe..b48893c805c0 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -328,3 +328,33 @@ def styleguide_pages_navigation(request): }, }) return render(request, 'styleguide/bootstrap5/pages/navigation.html', context) + + +@use_bootstrap5 +def styleguide_pages_views(request): + context = get_navigation_context("styleguide_pages_views_b5") + context.update({ + 'examples': { + 'functional_view': CodeForDisplay( + code=get_python_example_context('functional_view.py'), + language="Python", + ), + 'class_view': CodeForDisplay( + code=get_python_example_context('class_view.py'), + language="Python", + ), + 'example_urls': CodeForDisplay( + code=get_python_example_context('example_urls.py'), + language="Python", + ), + 'simple_centered_page': CodeForDisplay( + code=get_example_context('styleguide/bootstrap5/examples/simple_centered_page.html'), + language="HTML", + ), + 'simple_section': CodeForDisplay( + code=get_example_context('styleguide/bootstrap5/examples/simple_section.html'), + language="HTML", + ), + }, + }) + return render(request, 'styleguide/bootstrap5/pages/views.html', context) From ec58095b94b430812ad37095bbb27621a34034a4 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 18:36:43 +0100 Subject: [PATCH 59/67] standardize padding around text-only code examples --- .../templates/styleguide/bootstrap5/code_display.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html index c2f5e89f5298..3bfb9f935006 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html @@ -1 +1,3 @@ -{% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content.code language=content.language %} +
    + {% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content.code language=content.language %} +
    \ No newline at end of file From 1dfc1d220678f1127e99ca45207f8d8691788d2f Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 18:37:18 +0100 Subject: [PATCH 60/67] add bootstrap 5 styleguide tabs to tabs/config.py --- corehq/tabs/config.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/corehq/tabs/config.py b/corehq/tabs/config.py index 15d6ba84c6da..b78dcbb38455 100644 --- a/corehq/tabs/config.py +++ b/corehq/tabs/config.py @@ -1,3 +1,4 @@ +from corehq.apps.styleguide.examples.bootstrap5.tabs import StyleguideExamplesTab from corehq.apps.styleguide.tabs import SGExampleTab, SimpleCrispyFormSGExample from corehq.tabs.tabclasses import ( AccountingTab, @@ -37,7 +38,9 @@ AdminTab, SMSAdminTab, AccountingTab, - # Styleguide + # Bootstrap3 Styleguide SGExampleTab, SimpleCrispyFormSGExample, + # Bootstrap5 Styleguide + StyleguideExamplesTab, ) From 13f7e2b3b060670647d06139d99ba2d7c49405c0 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 18:37:50 +0100 Subject: [PATCH 61/67] add example of top-level navigation tabs to styleguide page on navigation --- .../templates/styleguide/bootstrap5/pages/navigation.html | 5 +++++ corehq/apps/styleguide/views/bootstrap5.py | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html index 4c541df39757..d20e217f3ee2 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/pages/navigation.html @@ -52,6 +52,11 @@

    Which tab is highlighted depends on the url_prefix_formats defined for each tab. Which items appear in a tab's dropdown is determined by dropdown_items.

    +

    + Below is an example of how tabs are structured to create the navigation for the example views covered in + the Views section of this styleguide. +

    + {% include 'styleguide/bootstrap5/code_display.html' with content=examples.tabs %}

    Side Navigation diff --git a/corehq/apps/styleguide/views/bootstrap5.py b/corehq/apps/styleguide/views/bootstrap5.py index b48893c805c0..ace8a6de9a1b 100644 --- a/corehq/apps/styleguide/views/bootstrap5.py +++ b/corehq/apps/styleguide/views/bootstrap5.py @@ -318,6 +318,10 @@ def styleguide_pages_navigation(request): context = get_navigation_context("styleguide_pages_navigation_b5") context.update({ 'examples': { + 'tabs': CodeForDisplay( + code=get_python_example_context('tabs.py'), + language="Python", + ), 'page_title_block': CodeForDisplay( code=get_example_context('styleguide/bootstrap5/examples/page_title_block.html'), language="HTML", From 40b02bef8754c3d5d987553b668b9f2d5e51ce7a Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 20:35:50 +0100 Subject: [PATCH 62/67] update bootstrap migration guide on suggestions for sharing markdown files and multiple runs of migrate_app_to_bootstrap5 --- .../bootstrap5/migration_guide.html | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html index b1ef628d6b10..35d979f5527e 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html @@ -51,7 +51,7 @@

  • Using an automated process, split template and javascript files that need changes into bootstrap3 - and bootstrap5 versions. This process will find / replace the straightforward changes and flag + and bootstrap5 versions. This process will find/replace the straightforward changes and flag more complex changes to be addressed later.

  • @@ -141,9 +141,14 @@

    The management command will iterate through all template and javascript files in the app. The command will prompt you to accept each find-and-replace change in a file. More involved changes will be - flagged with notes saved for later in BOOTSTRAP_MIGRATION_LOGS_DIR. You will always have the option - to skip changes that do not make sense. + flagged with notes saved for later in markdown files within the BOOTSTRAP_MIGRATION_LOGS_DIR. + You will always have the option to skip changes that do not make sense.

    +
    + Due to potential merge conflict issues, the markdown files outputted to BOOTSTRAP_MIGRATION_LOGS_DIR + are not version controlled. If you want to work on migrating an application with multiple people, you can zip + these markdown files and share with your collaborators for future reference. +

    Once a file is updated and split into the two bootstrap versions, the command will find references to the original filepath and replace them with the filepath to the bootstrap3 version. @@ -153,6 +158,26 @@

    moving on to the next file. The management command will prompt you to do this with a suggested commit message. Formatting our commits this way is important to maintain a clean git history.

    +
    +

    + It is possible that you might have to run a migration multiple times on an app. It might be the case that templates + or javascript files have several nested dependencies. +

    +

    + For instance, let's suppose one template called webapps_base.html is + split into bootstrap3 and bootstrap5 versions. In that same run of + migrate_app_to_bootstrap5, a template called question.html was already checked but + never split because it did not contain code needing an upgrade. However, this template extends + webapps_base.html, so it does need to be split. +

    +

    + When webapps_base.html is renamed to a bootstrap3 path, the extend path + in question.html is also updated. Since question.html was checked before + webapps_base.html, the migration script did not catch that question.html now extends from + a bootstrap3 template. A second run of migrate_app_to_bootstrap5 would catch this and + accurately split question.html. +

    +

    Configure & Update Diffs From 5f74eda00fdd2a9d5bb1fbb8b1e3fc257f6fe6a8 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 20:39:19 +0100 Subject: [PATCH 63/67] specify app_name a little more to reduce confusion --- .../styleguide/bootstrap5/migration_guide.html | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html index 35d979f5527e..3f714d91151b 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html @@ -109,11 +109,13 @@

    ask that people refrain from any front-end development in that app until changes from the split files step have been merged.

    -

    +

    + Important: After announcing your intent to migrate the app, please update the app's migration status in this table. -

    + target="_blank">in this table. This is also a good place to see what apps have not been migrated yet, if + you are in need of ideas. +

    Step 2: Split Files @@ -138,6 +140,10 @@

    ./manage.py migrate_app_to_bootstrap5 <app_name>

    +

    + For instance, if you want to migrate corehq.apps.reminders, you would use reminders as + <app_name>. +

    The management command will iterate through all template and javascript files in the app. The command will prompt you to accept each find-and-replace change in a file. More involved changes will be From e7912cec785771a86a04dd921b62fb015d273d2e Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 20:40:55 +0100 Subject: [PATCH 64/67] make this table bold --- .../templates/styleguide/bootstrap5/migration_guide.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html index 3f714d91151b..668fada4bc17 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/migration_guide.html @@ -112,8 +112,8 @@

    Important: After announcing your intent to migrate the app, please update the app's migration status - in this table. This is also a good place to see what apps have not been migrated yet, if + in this table. This is also a good place to see what apps have not been migrated yet, if you are in need of ideas.
    From 9c192b3a24f186228c471fa5d534b8a488de6bb5 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 20:49:36 +0100 Subject: [PATCH 65/67] add deprecation message and link to new styleguide in bootstrap 3 styleguide --- .../styleguide/templates/styleguide/bootstrap3/base.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap3/base.html b/corehq/apps/styleguide/templates/styleguide/bootstrap3/base.html index abbd3040d566..2442f4a89a9c 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap3/base.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap3/base.html @@ -59,6 +59,13 @@

    +
    +

    This guide will be deprecated soon!

    +

    + CommCare HQ is currently undergoing a migration to Bootstrap 5. + You can find the updated style guide here. +

    +
    {% block content %} {% endblock content %}
    From 8d3e34200f235020a49426b767ba9e7f9068f001 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 22 Feb 2024 20:57:03 +0100 Subject: [PATCH 66/67] lint --- .../templates/styleguide/bootstrap5/code_display.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html index 3bfb9f935006..06102e9d54e0 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/code_display.html @@ -1,3 +1,3 @@
    {% include 'styleguide/bootstrap5/partials/readable_code_block.html' with content=content.code language=content.language %} -
    \ No newline at end of file +
    From 558d24c10e965b52ffee25087250ff13f98dae90 Mon Sep 17 00:00:00 2001 From: Biyeun Buczyk Date: Thu, 29 Feb 2024 19:23:37 +0100 Subject: [PATCH 67/67] update icons in styleguide to match new icons from fontawesome 6 --- corehq/apps/styleguide/context.py | 28 ++++++++++--------- .../bootstrap3/_includes/atoms/icons.html | 4 +-- .../_includes/atoms/icons/panel.html | 4 +-- .../styleguide/bootstrap5/atoms/icons.html | 6 ++-- .../bootstrap5/atoms/partials/icon_set.html | 4 +-- 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/corehq/apps/styleguide/context.py b/corehq/apps/styleguide/context.py index a1a396295cba..a58050ba111d 100644 --- a/corehq/apps/styleguide/context.py +++ b/corehq/apps/styleguide/context.py @@ -216,22 +216,24 @@ def get_gradient_colors(): } +def _add_prefix_to_icons(prefix, icon_list): + return [f"{prefix} {icon}" for icon in icon_list] + + def get_common_icons(): return [ { 'name': 'Common FontAwesome primary icons', - 'icons': [ - 'fa-plus', 'fa-trash', 'fa-remove', 'fa-search', - 'fa-angle-double-right', 'fa-angle-double-down', - ], + 'icons': _add_prefix_to_icons('fa-solid', [ + 'fa-plus', 'fa-remove', 'fa-search', 'fa-angle-double-right', 'fa-angle-double-down', + ]) + _add_prefix_to_icons('fa-regular', ['fa-trash-can']), }, { 'name': 'Common FontAwesome secondary icons', - 'icons': [ - 'fa-cloud-download', 'fa-cloud-upload', - 'fa-warning', 'fa-info-circle', 'fa-question-circle', 'fa-check', - 'fa-external-link', - ], + 'icons': _add_prefix_to_icons('fa-solid', [ + 'fa-cloud-download', 'fa-cloud-upload', 'fa-warning', 'fa-info-circle', 'fa-question-circle', + 'fa-check', 'fa-external-link', + ]), } ] @@ -240,24 +242,24 @@ def get_custom_icons(): return [ { 'name': 'Custom HQ icons', - 'icons': [ + 'icons': _add_prefix_to_icons('fcc', [ 'fcc-flower', 'fcc-applications', 'fcc-commtrack', 'fcc-reports', 'fcc-data', 'fcc-users', 'fcc-settings', 'fcc-help', 'fcc-exchange', 'fcc-messaging', 'fcc-chart-report', 'fcc-form-report', 'fcc-datatable-report', 'fcc-piegraph-report', 'fcc-survey', 'fcc-casemgt', 'fcc-blankapp', 'fcc-globe', 'fcc-app-createform', 'fcc-app-updateform', 'fcc-app-completeform', 'fcc-app-biometrics', - ], + ]), }, { 'name': 'Custom HQ icons specific to form builder', - 'icons': [ + 'icons': _add_prefix_to_icons('fcc', [ 'fcc-fd-text', 'fcc-fd-numeric', 'fcc-fd-data', 'fcc-fd-variable', 'fcc-fd-single-select', 'fcc-fd-single-circle', 'fcc-fd-multi-select', 'fcc-fd-multi-box', 'fcc-fd-decimal', 'fcc-fd-long', 'fcc-fd-datetime', 'fcc-fd-audio-capture', 'fcc-fd-android-intent', 'fcc-fd-signature', 'fcc-fd-multi-box', 'fcc-fd-single-circle', 'fcc-fd-hash', 'fcc-fd-external-case', 'fcc-fd-external-case-data', 'fcc-fd-expand', 'fcc-fd-collapse', 'fcc-fd-case-property', 'fcc-fd-edit-form', - ], + ]), }, ] diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html index a1cb6c016936..215c25f47225 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons.html @@ -32,8 +32,8 @@

    Primary vs Secondary Icons

    All icons in FontAwesome are already built into HQ. Other icons have been custom created for HQ.

    - {% include 'styleguide/bootstrap3/_includes/atoms/icons/panel.html' with prefix="fa" icons=common_icons %} - {% include 'styleguide/bootstrap3/_includes/atoms/icons/panel.html' with prefix="fcc" icons=custom_icons %} + {% include 'styleguide/bootstrap3/_includes/atoms/icons/panel.html' with icons=common_icons %} + {% include 'styleguide/bootstrap3/_includes/atoms/icons/panel.html' with icons=custom_icons %}

    Creating New Icons

    diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons/panel.html b/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons/panel.html index f18a35dc7e46..ab425f6ff542 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons/panel.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap3/_includes/atoms/icons/panel.html @@ -9,10 +9,10 @@

    {{ icon_set.name }}

    {% for icon in icon_set.icons %}
    - +
    - <i class="{{ prefix }} {{ icon }}"></i> + <i class="{{ icon }}"></i>
    {% endfor %} diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html index e593152383b6..f50483766e4a 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/icons.html @@ -59,11 +59,11 @@

    Most of HQ's icons come from - FontAwesome. + FontAwesome. All icons in FontAwesome are already built into HQ. Other icons have been custom created for HQ.

    - {% include 'styleguide/bootstrap5/atoms/partials/icon_set.html' with prefix="fa" icons=common_icons %} + {% include 'styleguide/bootstrap5/atoms/partials/icon_set.html' with icons=common_icons %}

    Custom Icons @@ -72,7 +72,7 @@

    HQ has its own set of icons custom created to communicate HQ-specific concepts. The majority of these icons are found in App Builder and Form Designer.

    - {% include 'styleguide/bootstrap5/atoms/partials/icon_set.html' with prefix="fcc" icons=custom_icons %} + {% include 'styleguide/bootstrap5/atoms/partials/icon_set.html' with icons=custom_icons %}

    Creating New Icons diff --git a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/icon_set.html b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/icon_set.html index 2cb7640e75ed..dc726b0b5f19 100644 --- a/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/icon_set.html +++ b/corehq/apps/styleguide/templates/styleguide/bootstrap5/atoms/partials/icon_set.html @@ -6,8 +6,8 @@

    {% for icon in icon_set.icons %}

    - - <i class="{{ prefix }} {{ icon }}"></i> + + <i class="{{ icon }}"></i>

    {% endfor %}