diff --git a/.ds.baseline b/.ds.baseline index 0619ba06a..076016c38 100644 --- a/.ds.baseline +++ b/.ds.baseline @@ -553,7 +553,7 @@ "filename": "tests/app/main/views/test_sign_in.py", "hashed_secret": "8b8b69116ee882b5e987e330f55db81aba0636f9", "is_verified": false, - "line_number": 97, + "line_number": 95, "is_secret": false } ], diff --git a/app/assets/images/messaging-devices.svg b/app/assets/images/messaging-devices.svg new file mode 100644 index 000000000..00bd3f99f --- /dev/null +++ b/app/assets/images/messaging-devices.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/app/assets/javascripts/liveSearch.js b/app/assets/javascripts/liveSearch.js index 301ba7b0c..fd3c62002 100644 --- a/app/assets/javascripts/liveSearch.js +++ b/app/assets/javascripts/liveSearch.js @@ -20,7 +20,6 @@ $targets.each(function() { let content = $('.live-search-relevant', this).text() || $(this).text(); - let isMatch = normalize(content).indexOf(normalize(query)) > -1; if ($(this).has(':checked').length) { $(this).show(); @@ -29,21 +28,25 @@ } if (query == '') { - $(this).css('display', ''); + $(this).removeClass('js-hidden'); results++; return; } - $(this).toggle(isMatch); - - if (isMatch) { results++; } + let isMatch = normalize(content).includes(normalize(query)); + if (isMatch) { + $(this).removeClass('js-hidden'); + results++; + } else { + $(this).addClass('js-hidden'); + } }); if (query !== '' && results === 0) { - $noResultsMessage.show(); + $noResultsMessage.removeClass('js-hidden'); } else { - $noResultsMessage.hide(); + $noResultsMessage.addClass('js-hidden'); } if (state === 'loaded') { diff --git a/app/assets/javascripts/templateFolderForm.js b/app/assets/javascripts/templateFolderForm.js index 9dedb50d5..b024ced5a 100644 --- a/app/assets/javascripts/templateFolderForm.js +++ b/app/assets/javascripts/templateFolderForm.js @@ -197,6 +197,11 @@ if (event.currentTarget.value === 'add-new-template' && this.$singleNotificationChannel) { window.location = "/services/" + this.$singleChannelService + "/templates/add-" + this.$singleNotificationChannel; } else { + if (this.currentState === 'add-new-template') { + this.$form.find('input[type=checkbox]').prop('checked', false); + this.selectionStatus.update({ total: 0, templates: 0, folders: 0 }); + } + if (this.stateChanged()) { this.render(); } @@ -286,7 +291,29 @@ mode = 'dialog'; } - if (currentStateObj && ('setFocus' in currentStateObj)) { + if (this.currentState === 'add-new-template') { + this.$form.find('.template-list-item').addClass('js-hidden'); + $('.live-search').addClass('js-hidden'); + $('#breadcrumb-template-folders').addClass('js-hidden'); + $('#template-list').addClass('js-hidden'); + this.$form.find('input[type=checkbox]').prop('checked', false); + this.selectionStatus.update({ total: 0, templates: 0, folders: 0 }); + + $('#page-title').text('New Template'); + $('#page-description').text('Every message starts with a template. Choose to start with a blank template or copy an existing template.'); + document.title = 'New Templates'; + } else { + this.$form.find('.template-list-item').removeClass('js-hidden'); + $('.live-search').removeClass('js-hidden'); + $('#breadcrumb-template-folders').removeClass('js-hidden'); + $('#template-list').removeClass('js-hidden'); + + $('#page-title').text('Select or create a template'); + $('#page-description').text('Every message starts with a template. To send, choose or create a template.'); + document.title = 'Select or create a template'; + } + + if (currentStateObj && 'setFocus' in currentStateObj) { scrollTop = $(window).scrollTop(); currentStateObj.setFocus(); $(window).scrollTop(scrollTop); diff --git a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss index 737d45172..4d8efcb49 100644 --- a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss +++ b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss @@ -229,6 +229,10 @@ td.table-empty-message { display: none; } +.js-hidden { + display: none !important; +} + .folder-heading a.folder-heading-folder, .template-list-folder { background: url(../img/material-icons/folder.svg) no-repeat; @@ -871,6 +875,10 @@ $do-dont-top-bar-width: 1; border-radius: 2px; } +.bg-gray-cool { + background-color: #dfe1e2; +} + .svg-circle-icon { display: inline-block; margin: 0; diff --git a/app/templates/base.html b/app/templates/base.html index b647a21a8..8f349ffa7 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -35,32 +35,6 @@ {% block header %} {% include 'components/usa_banner.html' %} - {% if not is_api_down %} - {% if current_user.is_authenticated or current_service or current_user.platform_admin %} -
-
-
-

Notify.gov Service Ending

-

- GSA will no longer offer the Notify.gov service after June 8th, 2025. Visit - Notify.gov Service Ending for more information. -

-
-
-
- {% else %} -
-
-
-

Notify.gov Service Ending

-

- Notify.gov is no longer accepting new partners. -

-
-
-
- {% endif %} - {% endif %} {% include 'components/header.html' %} {% endblock %} @@ -157,7 +131,7 @@
  • - diff --git a/app/templates/components/header.html b/app/templates/components/header.html index 760cc905d..30e4c7dbe 100644 --- a/app/templates/components/header.html +++ b/app/templates/components/header.html @@ -1,48 +1,32 @@ -{% set is_about_page = request.path.startswith('/about') %} -{% set is_contact_page = request.path.startswith('/contact') %} -{% set is_information_section = is_about_page or is_contact_page %} - {% if current_user.is_authenticated %} -{% set navigation = [ - {"href": url_for("main.show_accounts_or_dashboard"), "text": "Current service", "active": request.path.startswith('/accounts')}, - {"href": url_for('main.get_started'), "text": "Using Notify", "active": request.path.startswith('/using-notify')}, - {"href": url_for('main.support'), "text": "Contact us", "active": header_navigation.is_selected('support')} -] %} + {% set navigation = [ + {"href": url_for("main.show_accounts_or_dashboard"), "text": "Current service", "active": request.path.startswith('/accounts')}, + {"href": url_for('main.get_started'), "text": "Using Notify", "active": request.path.startswith('/using-notify')}, + {"href": url_for('main.support'), "text": "Contact us", "active": header_navigation.is_selected('support')} + ] %} + + {% if current_user.platform_admin %} + {% set navigation = navigation + [{"href": url_for('main.platform_admin_splash_page'), "text": "Platform admin", "active": header_navigation.is_selected('platform-admin')}] %} + {% else %} + {% set navigation = navigation + [{"href": url_for('main.user_profile'), "text": "User profile", "active": header_navigation.is_selected('user-profile')}] %} + {% endif %} + + {% if current_service %} + {% if current_user.has_permissions('manage_service') %} + {% set secondaryNavigation = [ + {"href": url_for('main.service_settings', service_id=current_service.id), "text": "Settings", "active": secondary_navigation.is_selected('settings')}, + {"href": url_for('main.sign_out'), "text": "Sign out"} + ] %} + {% else %} + {% set secondaryNavigation = [ + {"href": url_for('main.sign_out'), "text": "Sign out"} + ] %} + {% endif %} + {% else %} + {% set secondaryNavigation = [{"href": url_for('main.sign_out'), "text": "Sign out"}] %} + {% endif %} -{% if current_user.platform_admin %} -{% set navigation = navigation + [{"href": url_for('main.platform_admin_splash_page'), "text": "Platform admin", "active": header_navigation.is_selected('platform-admin')}] %} -{% else %} -{% set navigation = navigation + [{"href": url_for('main.user_profile'), "text": "User profile", "active": header_navigation.is_selected('user-profile')}] %} {% endif %} - -{% if current_service %} -{% if current_user.has_permissions('manage_service') %} -{% set secondaryNavigation = [ - {"href": url_for('main.service_settings', service_id=current_service.id), "text": "Settings", "active": secondary_navigation.is_selected('settings')}, - {"href": url_for('main.sign_out'), "text": "Sign out"} -] %} -{% else %} -{% set secondaryNavigation = [ - {"href": url_for('main.sign_out'), "text": "Sign out"} -] %} -{% endif %} -{% else %} -{% set secondaryNavigation = [{"href": url_for('main.sign_out'), "text": "Sign out"}] %} -{% endif %} - -{% else %} -{% set navigation = [ - {"href": url_for('main.about_notify'), "text": "About Notify", "active": is_about_page}, - {"href": url_for('main.contact'), "text": "Contact us", "active": is_contact_page} -] %} -{% endif %} - - - - - - -
    @@ -59,16 +43,7 @@ {% endif %}
    - {% if not current_user.is_authenticated and is_information_section%} - - {% endif %}
    - diff --git a/app/templates/views/signedout.html b/app/templates/views/signedout.html index 804724a7f..91a860b9c 100644 --- a/app/templates/views/signedout.html +++ b/app/templates/views/signedout.html @@ -16,191 +16,57 @@ import usaButton %} {% block meta %} {% if is_api_down %} {% include "error/technical_difficulties.html" %} {% else %} -
    +
    +
    +
    +
    +

    + Sunsetting Notify.gov +

    +

    + This beta product is no longer in service as of June 9, 2025. +

    +
    +
    +
    +
    +
    -

    - Reach people where they are with government-powered text messages -

    -

    - Notify.gov is a text messaging service that helps federal, state, - local, tribal and territorial governments more effectively - communicate with the people they serve. +

    + Text messaging services +

    +

    + Though the Notify.gov service is no longer available, government programs can continue to explore text messaging services.

    -
    - - if you are an existing partner -
    +

    Commercial messaging providers may support government use cases. For agencies with the resources to set up and support it, the notifications service codebase that runs Notify.gov is open source and can be reused.

    -
    -

    - Government texting made easy -

    -

    - Notify.gov is a text messaging platform built for government agencies. - With minimal set-up and secure, personalized messaging, you can make - one-way texting a part of your outreach program. -

    -
    - -
    -

    Key features

    -
    -
      -
    • -
      -
      - Globe on top of a web browser -
      -

      Web-based

      -
      -
      -

      Nothing to download or install

      -
      -
      -
    • -
    • -
      -
      - Stopwatch with a notification speech bubble with a star inside -
      -

      Fast and easy

      -
      -
      -

      No technical expertise required

      -
      -
      -
    • -
    • -
      -
      - 3 status messages, 2 successes and one failure -
      -

      Track message delivery

      -
      -
      -

      See which messages were received

      -
      -
      -
    • -
    -
      -
    • -
      -
      - Speech bubbles with the letter A and the Chinese character for language -
      -

      - Send in recipients' preferred language -

      -
      -
      -

      Notify.gov has support for more than 30 character sets

      -
      -
      -
    • -
    • -
      -
      - Lock with code icon inside on top of a web browser -
      -

      Security and privacy

      -
      -
      -

      - Limited data retention, encryption, and multi-factor - authentication protect user data and manage risk with
      our security efforts -

      -
      -
      -
    • -
    • -
      -
      - Paper airplane and a notification icon with the number 1 inside -
      -

      - Send bulk, customized, one-way messages -

      -
      -
      -

      - Send hundreds or thousands of individually customized messages - with just a few clicks -

      -
      -
      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -

    - Contact us
    -

    -
    -
    +
    +
    {% endif %} diff --git a/app/templates/views/templates/choose-reply.html b/app/templates/views/templates/choose-reply.html index 69bbe4770..0fd516763 100644 --- a/app/templates/views/templates/choose-reply.html +++ b/app/templates/views/templates/choose-reply.html @@ -40,7 +40,7 @@