diff --git a/styles/components/_portfolio_layout.scss b/styles/components/_portfolio_layout.scss index 9c28239f..bad7fbca 100644 --- a/styles/components/_portfolio_layout.scss +++ b/styles/components/_portfolio_layout.scss @@ -91,10 +91,6 @@ } } -.portfolio-content { - margin: 6 * $gap $gap 0 $gap; -} - @mixin subheading { color: $color-gray-dark; padding: $gap 0; @@ -104,6 +100,37 @@ font-weight: bold; } +.portfolio-content { + margin: 6 * $gap $gap 0 $gap; + + .application-content { + .subheading { + @include subheading; + } + + .panel { + padding: $gap / 2 0; + box-shadow: 0 6px 18px 0 rgba(144,164,183,0.3); + border-top: none; + border-bottom: none; + } + + .application-list-item { + ul { + padding-left: 0; + } + .block-list__footer { + border-bottom: none; + } + .application-edit__env-list-item { + label { + color: $color-black; + } + } + } + } +} + .portfolio-applications { .portfolio-applications__header { margin-bottom: 4 * $gap; diff --git a/styles/elements/_inputs.scss b/styles/elements/_inputs.scss index f72f48ee..296b4a71 100644 --- a/styles/elements/_inputs.scss +++ b/styles/elements/_inputs.scss @@ -12,7 +12,7 @@ @mixin input-state($state) { $border-width: 1px; - $state-color: $color-gray; + $state-color: $color-blue; @if $state == 'error' { $border-width: 2px; @@ -283,6 +283,8 @@ } } + @include input-state('default'); + &.usa-input--error { @include input-state('error'); } diff --git a/templates/fragments/edit_application_form.html b/templates/fragments/edit_application_form.html index 9b9e1bbc..ef5dd455 100644 --- a/templates/fragments/edit_application_form.html +++ b/templates/fragments/edit_application_form.html @@ -1,18 +1,8 @@ {% from "components/text_input.html" import TextInput %} -{% set title_text = ('fragments.edit_application_form.existing_application_title' | translate({ "application_name": application.name })) if application else ('fragments.edit_application_form.new_application_title' | translate) %} - {{ form.csrf_token }} -
-
-

{{ title_text }}

-
- -
-

- {{ "fragments.edit_application_form.explain" | translate }} -

- {{ TextInput(form.name) }} - {{ TextInput(form.description, paragraph=True) }} -
-
+

+ {{ "fragments.edit_application_form.explain" | translate }} +

+{{ TextInput(form.name) }} +{{ TextInput(form.description, paragraph=True) }} diff --git a/templates/portfolios/applications/base.html b/templates/portfolios/applications/base.html new file mode 100644 index 00000000..2b633e70 --- /dev/null +++ b/templates/portfolios/applications/base.html @@ -0,0 +1,15 @@ +{% extends "portfolios/base.html" %} + +{% block portfolio_header %} +
+
+ {{ secondary_breadcrumb }} +
+
+{% endblock %} + +{% block portfolio_content %} +
+ {% block application_content %}{% endblock %} +
+{% endblock %} diff --git a/templates/portfolios/applications/edit.html b/templates/portfolios/applications/edit.html index 87a78626..c648f2f7 100644 --- a/templates/portfolios/applications/edit.html +++ b/templates/portfolios/applications/edit.html @@ -1,35 +1,43 @@ -{% extends "portfolios/base.html" %} +{% extends "portfolios/applications/base.html" %} {% from "components/text_input.html" import TextInput %} -{% block portfolio_content %} +{% set secondary_breadcrumb = 'portfolios.applications.existing_application_title' | translate({ "application_name": application.name }) %} + +{% block application_content %} + +
{{ 'portfolios.applications.settings_heading' | translate }}
+
+
- {% include "fragments/edit_application_form.html" %} + {% include "fragments/edit_application_form.html" %} -
-
-

Application Environments

-

- Each environment created within an application is an enclave of cloud resources that is logically separated from each other for increased security. -

-
+
+
+

{{ 'portfolios.applications.environments_heading' | translate }}

+

+ {{ 'portfolios.applications.environments_description' | translate }} +

+
-
    - {% for environment in application.environments %} -
  • -
    - - -
    -
  • - {% endfor %} -
+
    + {% for environment in application.environments %} +
  • +
    + + +
    +
  • + {% endfor %} +
+
+ +
-
- +
diff --git a/templates/portfolios/applications/new.html b/templates/portfolios/applications/new.html index 43974603..343bb10a 100644 --- a/templates/portfolios/applications/new.html +++ b/templates/portfolios/applications/new.html @@ -1,72 +1,82 @@ -{% extends "portfolios/base.html" %} +{% extends "portfolios/applications/base.html" %} {% from "components/alert.html" import Alert %} {% from "components/icon.html" import Icon %} {% from "components/modal.html" import Modal %} {% from "components/text_input.html" import TextInput %} -{% block portfolio_content %} +{% set secondary_breadcrumb = 'portfolios.applications.new_application_title' | translate %} + +{% block application_content %} {% set modalName = "newApplicationConfirmation" %} {% include "fragments/flash.html" %} +
{{ 'portfolios.applications.settings_heading' | translate }}
+
+
+
- {% call Modal(name=modalName, dismissable=False) %} -

Create application !{ name }

+ {% call Modal(name=modalName, dismissable=False) %} +

Create application !{ name }

-

- When you click Create Application, the environments - - !{environment.name} - - will be created as individual cloud resource groups under !{ name } application. -

+

+ When you click {{ 'portfolios.applications.create_button_text' | translate }}, the environments + + !{environment.name} + + will be created as individual cloud resource groups under !{ name } application. +

-
- - -
- {% endcall %} - - {% include "fragments/edit_application_form.html" %} - -
{# this extra div prevents this bug: https://www.pivotaltracker.com/story/show/160768940 #} -
- {{ Alert(message=None, level="error", vue_template=True) }} -
-
- -
-
-

Application Environments

-

- Each environment created within an application is an enclave of cloud resources that is logically separated from each other for increased security. -

-
- -
    -
  • -
    - - - +
    + +
    - -
  • -
+ {% endcall %} + + {% include "fragments/edit_application_form.html" %} + +
{# this extra div prevents this bug: https://www.pivotaltracker.com/story/show/160768940 #} +
+ {{ Alert(message=None, level="error", vue_template=True) }} +
+
+ +
+
+

{{ 'portfolios.applications.environments_heading' | translate }}

+

+ {{ 'portfolios.applications.environments_description' | translate }} +

+
+ +
    +
  • +
    + + + +
    + +
  • +
+ + +
+ -
- +
diff --git a/translations.yaml b/translations.yaml index dfaf1773..256d78fd 100644 --- a/translations.yaml +++ b/translations.yaml @@ -173,7 +173,7 @@ forms: environment_names_label: Environment Name environment_names_required_validation_message: Provide at least one environment name. environment_names_unique_validation_message: Environment names must be unique. - name_label: Application Name + name_label: Name task_order: portfolio_name_label: Organization Portfolio Name portfolio_name_description: The name of your office or organization. You can add multiple applications to your portfolio. Your task orders are used to pay for these applications and their environments. @@ -257,8 +257,7 @@ forms: name_length_validation_message: Portfolio names must be at least 4 and not more than 100 characters fragments: edit_application_form: - existing_application_title: 'Edit {application_name} application' - explain: 'AT-AT allows you to organize your portfolio into multiple applications, each of which may have environments.' + explain: 'AT-AT allows you to create multiple applications within a portfolio. Each application can then be broken down into its own customizable environments.' new_application_title: Add a new application edit_user_form: date_last_training_tooltip: When was the last time you completed the IA training?
Information Assurance (IA) training is an important step in cyber awareness. @@ -487,6 +486,13 @@ portfolios: app_settings_text: App Settings team_text: Team csp_console_text: CSP Console + existing_application_title: '{application_name} Application Settings' + new_application_title: New Application + settings_heading: Application Settings + environments_heading: Environments + environments_description: Each environment created within an application is logically separated from one another for easier management and security. + update_button_text: Save Changes + create_button_text: Create Application testing: example_string: Hello World example_with_variables: 'Hello, {name}!'