diff --git a/CHANGELOG.md b/CHANGELOG.md index 089a095..1ae6d0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 1.2.12 - 2025-4-29 +- Fixed html parser errors. ([#158](https://github.com/opendevstack/ods-document-generation-templates/pull/158)) - Remove Jira issue ID strikethrough on SLC documents. ([#153](https://github.com/opendevstack/ods-document-generation-templates/pull/153)) - Make content in column Test Case No. wrappable. ([#152](https://github.com/opendevstack/ods-document-generation-templates/pull/152)) - TIR changes: Wording changes to be more inclusive of helm deployments, removed dynamic values from report tables and change in table formatting ([#146](https://github.com/opendevstack/ods-document-generation-templates/pull/146)) & ([#154](https://github.com/opendevstack/ods-document-generation-templates/pull/154)) diff --git a/css/styles.css b/css/styles.css index 84a0897..e783b7c 100644 --- a/css/styles.css +++ b/css/styles.css @@ -47,6 +47,9 @@ h5 span { margin-right: 1.5em; } +del { + text-decoration: none; +} input + label { margin-left: 0.5em; @@ -168,6 +171,27 @@ td.content-wrappable table th, td.content-wrappable table td { white-space: normal; } +/* Remove all spacing around .inner-ul-2 elements */ + +td > ul.inner-ul { + list-style-type: none; + padding: 0em; + margin: 0em; +} + +li > ul.inner-ul { + list-style-type: none; + padding-left: 1em; + padding-right: 0em; + padding-top: 0em; + padding-bottom: 0em; +} + +.inner-span { + display: inline-block; + margin-right: 0em; +} + .center { text-align: center; } diff --git a/scripts/scripts.js b/scripts/scripts.js index 386c5fc..a9a37ab 100644 --- a/scripts/scripts.js +++ b/scripts/scripts.js @@ -1,21 +1,39 @@ function subst() { - var vars = {}; + var vars = {}; - var query_strings_from_url = document.location.search.substring(1).split('&'); - for (var query_string in query_strings_from_url) { - if (query_strings_from_url.hasOwnProperty(query_string)) { - var temp_var = query_strings_from_url[query_string].split('=', 2); - vars[temp_var[0]] = decodeURI(temp_var[1]); + var query_strings_from_url = document.location.search + .substring(1) + .split("&"); + for (var query_string in query_strings_from_url) { + if (query_strings_from_url.hasOwnProperty(query_string)) { + var temp_var = query_strings_from_url[query_string].split("=", 2); + vars[temp_var[0]] = decodeURI(temp_var[1]); + } } - } - var css_selector_classes = ['page', 'frompage', 'topage', 'webpage', 'section', 'subsection', 'date', 'isodate', 'time', 'title', 'doctitle', 'sitepage', 'sitepages']; - for (var css_class in css_selector_classes) { - if (css_selector_classes.hasOwnProperty(css_class)) { - var element = document.getElementsByClassName(css_selector_classes[css_class]); - for (var j = 0; j < element.length; ++j) { - element[j].textContent = vars[css_selector_classes[css_class]]; - } + var css_selector_classes = [ + "page", + "frompage", + "topage", + "webpage", + "section", + "subsection", + "date", + "isodate", + "time", + "title", + "doctitle", + "sitepage", + "sitepages", + ]; + for (var css_class in css_selector_classes) { + if (css_selector_classes.hasOwnProperty(css_class)) { + var element = document.getElementsByClassName( + css_selector_classes[css_class] + ); + for (var j = 0; j < element.length; ++j) { + element[j].textContent = vars[css_selector_classes[css_class]]; + } + } } - } } diff --git a/templates/CSD-3.html.tmpl b/templates/CSD-3.html.tmpl index fcb7fd0..8a600b6 100644 --- a/templates/CSD-3.html.tmpl +++ b/templates/CSD-3.html.tmpl @@ -742,6 +742,7 @@ URS Summary: {{{ursName}}}{{#if ursDescription}}
{{{ursDescription}}}{{/if}} {{applicability}} + FS Summary: {{{fsName}}}{{#if fsDescription}}
{{{fsDescription}}}{{/if}} diff --git a/templates/CSD-5.html.tmpl b/templates/CSD-5.html.tmpl index ee2c7dc..2a4a4b2 100644 --- a/templates/CSD-5.html.tmpl +++ b/templates/CSD-5.html.tmpl @@ -268,6 +268,7 @@ {{applicability}} {{/each}} + {{/each}} {{else}} diff --git a/templates/DIL.html.tmpl b/templates/DIL.html.tmpl index 6caab57..b98d1c9 100644 --- a/templates/DIL.html.tmpl +++ b/templates/DIL.html.tmpl @@ -68,7 +68,7 @@

Functional / Requirements Testing Discrepancy Log

This Discrepancy Log is to be used for documentation of any discrepancies (e.g. failed test cases, test case errors, testing execution errors) found during testing. These should include all test cases where the result has been set to failed.

-

Clarification: Discrepancies detected during a test run will be documented in the Discrepancy Log (DIL) version associated with the test run. The DIL will be created during each test run. Any updated version of the DIL showing no discrepancies serves as evidence for the successful correction of the error(s) causing the discrepancies.
+

Clarification: Discrepancies detected during a test run will be documented in the Discrepancy Log (DIL) version associated with the test run. The DIL will be created during each test run. Any updated version of the DIL showing no discrepancies serves as evidence for the successful correction of the error(s) causing the discrepancies.
Furthermore, this discrepancy log only covers discrepancies from tasks automated through OpenDevStack. Any manual tasks done outside of OpenDevStack, which created discrepancies, must be covered in a secondary DIL.

Integration Testing Discrepancy Log

@@ -82,7 +82,7 @@ - + @@ -94,7 +94,7 @@ {{#each data.integrationTests}} - + @@ -122,7 +122,7 @@
Discrepancy IDTest Case No.Test Case No. Level of Test Case Description of Failure or Discrepancy Remediation Action
{{discrepancyID}}{{testcaseID}}{{testcaseID}} Integration {{{description}}} {{{remediation}}}
- + @@ -134,7 +134,7 @@ {{#each data.acceptanceTests}} - + diff --git a/templates/IVP.html.tmpl b/templates/IVP.html.tmpl index 0a6e66d..7f825c1 100644 --- a/templates/IVP.html.tmpl +++ b/templates/IVP.html.tmpl @@ -312,10 +312,10 @@ Other test cases: - + {{/each}} diff --git a/templates/SSDS-1.html.tmpl b/templates/SSDS-1.html.tmpl index 726128e..a5ae941 100644 --- a/templates/SSDS-1.html.tmpl +++ b/templates/SSDS-1.html.tmpl @@ -147,7 +147,7 @@ {{/if}} {{#if data.sections.sec16s1.bitbucket}}

- A Bitbucket Pull Request (PR) is where contributors and reviewers meet to discuss and assert the readiness of a contribution to a Bitbucket repository comprising code, tests, configuration, or a combination of these.
+ A Bitbucket Pull Request (PR) is where contributors and reviewers meet to discuss and assert the readiness of a contribution to a Bitbucket repository comprising code, tests, configuration, or a combination of these.

A person who creates a PR gets attributed as its author and nominates at least one reviewer. Once mandatory changes requested by the reviewers have been incorporated by the contributors, reviewers can approve the PR. An approval permits that the approved contribution can be merged from a temporary source branch into a longer living target branch inside the repository.{{#if metadata.gxp}} A single person must not assume the roles of contributor and reviewer on the same PR (no self-approvals).{{/if}}

diff --git a/templates/SSDS-3.html.tmpl b/templates/SSDS-3.html.tmpl index 2e6e3ec..df85cf1 100644 --- a/templates/SSDS-3.html.tmpl +++ b/templates/SSDS-3.html.tmpl @@ -147,7 +147,7 @@ {{/if}} {{#if data.sections.sec16s1.bitbucket}}

- A Bitbucket Pull Request (PR) is where contributors and reviewers meet to discuss and assert the readiness of a contribution to a Bitbucket repository comprising code, tests, configuration, or a combination of these.
+ A Bitbucket Pull Request (PR) is where contributors and reviewers meet to discuss and assert the readiness of a contribution to a Bitbucket repository comprising code, tests, configuration, or a combination of these.

A person who creates a PR gets attributed as its author and nominates at least one reviewer. Once mandatory changes requested by the reviewers have been incorporated by the contributors, reviewers can approve the PR. An approval permits that the approved contribution can be merged from a temporary source branch into a longer living target branch inside the repository.{{#if metadata.gxp}} A single person must not assume the roles of contributor and reviewer on the same PR (no self-approvals).{{/if}}

diff --git a/templates/SSDS-4.html.tmpl b/templates/SSDS-4.html.tmpl index 6ff7d99..a11fb84 100644 --- a/templates/SSDS-4.html.tmpl +++ b/templates/SSDS-4.html.tmpl @@ -146,7 +146,7 @@ {{/if}} {{#if data.sections.sec16s1.bitbucket}}

- A Bitbucket Pull Request (PR) is where contributors and reviewers meet to discuss and assert the readiness of a contribution to a Bitbucket repository comprising code, tests, configuration, or a combination of these.
+ A Bitbucket Pull Request (PR) is where contributors and reviewers meet to discuss and assert the readiness of a contribution to a Bitbucket repository comprising code, tests, configuration, or a combination of these.

A person who creates a PR gets attributed as its author and nominates at least one reviewer. Once mandatory changes requested by the reviewers have been incorporated by the contributors, reviewers can approve the PR. An approval permits that the approved contribution can be merged from a temporary source branch into a longer living target branch inside the repository.{{#if metadata.gxp}} A single person must not assume the roles of contributor and reviewer on the same PR (no self-approvals).{{/if}}

diff --git a/templates/SSDS-5.html.tmpl b/templates/SSDS-5.html.tmpl index 756ce2b..2efd122 100644 --- a/templates/SSDS-5.html.tmpl +++ b/templates/SSDS-5.html.tmpl @@ -152,7 +152,7 @@

Discrepancy IDTest Case No.Test Case No. Level of Test Case Description of Failure or Discrepancy Remediation Action
{{discrepancyID}}{{testcaseID}}{{testcaseID}} Acceptance {{{description}}} {{{remediation}}} {{#if steps}}
    - {{#each steps}} + {{#each steps}}
  1. {{step}}
  2. - {{/each}} -

    N/A

    /ol> + {{/each}} +
{{else}} No test steps defined {{/if}} diff --git a/templates/RA.html.tmpl b/templates/RA.html.tmpl index 2a816c5..11a0cb8 100644 --- a/templates/RA.html.tmpl +++ b/templates/RA.html.tmpl @@ -451,7 +451,7 @@
{{key}} {{type}}{{{name}}}
{{{description}}}
{{{name}}}
{{{description}}}
{{referencesRisk}}
{{/if}}

- A Bitbucket Pull Request (PR) is where contributors and reviewers meet to discuss and assert the readiness of a contribution to a Bitbucket repository comprising code, tests, configuration, or a combination of these.
+ A Bitbucket Pull Request (PR) is where contributors and reviewers meet to discuss and assert the readiness of a contribution to a Bitbucket repository comprising code, tests, configuration, or a combination of these.

A person who creates a PR gets attributed as its author and nominates at least one reviewer. Once mandatory changes requested by the reviewers have been incorporated by the contributors, reviewers can approve the PR. An approval permits that the approved contribution can be merged from a temporary source branch into a longer living target branch inside the repository.{{#if metadata.gxp}} A single person must not assume the roles of contributor and reviewer on the same PR (no self-approvals).{{/if}}

diff --git a/templates/TIR-infra.html.tmpl b/templates/TIR-infra.html.tmpl index dba66c2..9dd190c 100644 --- a/templates/TIR-infra.html.tmpl +++ b/templates/TIR-infra.html.tmpl @@ -290,7 +290,7 @@

6Reference Documents

{{#if data.sections.sec6.show}} diff --git a/templates/TIR.html.tmpl b/templates/TIR.html.tmpl index 36a2756..50e39c0 100644 --- a/templates/TIR.html.tmpl +++ b/templates/TIR.html.tmpl @@ -1,384 +1,647 @@ + + Technical Installation Report for '{{ metadata.name }}' + + + +
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Information
+ Name: + + {{ metadata.name }} +
+ Description: + + {{ metadata.description }} +
+ Version: + + {{ metadata.version }}/{{ data.documentHistoryLatestVersionId }} +
Date Created: + {{ metadata.date_created }} +
Git Commit: + {{ metadata.git.commit }} +
Git Tag: + {{ metadata.git.targetTag }} +
Git URL: + {{ metadata.git.url }} +
OpenShift Cluster API URL: + {{ metadata.openShift.apiUrl }} +
+ Created by Jenkins Job Name: + + {{ metadata.jenkins.jobName }} +
+ Created by Jenkins Build Number: + + {{ metadata.jenkins.buildNumber }} +
Target environment: + {{ metadata.buildParameter.targetEnvironment }} +
+
- - Technical Installation Report for '{{metadata.name}}' - - - - -
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Information -
Name:{{metadata.name}}
Description:{{metadata.description}}
Version:{{metadata.version}}/{{data.documentHistoryLatestVersionId}}
Date Created:{{metadata.date_created}}
Git Commit:{{metadata.git.commit}}
Git Tag:{{metadata.git.targetTag}}
Git URL:{{metadata.git.url}}
OpenShift Cluster API URL:{{metadata.openShift.apiUrl}}
Created by Jenkins Job Name:{{metadata.jenkins.jobName}}
Created by Jenkins Build Number:{{metadata.jenkins.buildNumber}}
Target environment:{{metadata.buildParameter.targetEnvironment}}
-
- -
 
- -

Technical Installation Report for '{{metadata.name}}'

- -

Table of Contents

-
    -
  1. Introduction
  2. -
  3. Installation
  4. -
  5. Diagnostics and Testing
  6. -
  7. Conclusion Statement
  8. -
  9. Definitions and Abbreviations -
      -
    1. Definitions
    2. -
    3. Abbreviations
    4. -
    -
  10. -
  11. Reference Documents
  12. -
  13. Document History
  14. -
-
- -
-

1Introduction

- -

This document describes the installation of the software-defined component {{data.repo.id}}. The installation is based on the corresponding Technical Installation Plan (TIP) of Config Item: {{metadata.buildParameter.configItem}}.

+
 
-

The plan outlines additional chapters, namely Installation Prerequisites (3) and Environmental Conditions (4).

+

Technical Installation Report for '{{ metadata.name }}'

-

Installation plan reference: ITEMS Document Number {{metadata.version}}-{{metadata.jenkins.buildNumber}}, Version: {{metadata.referencedDocs.TIP}}.

+

Table of Contents

+
    +
  1. Introduction
  2. +
  3. Installation
  4. +
  5. Diagnostics and Testing
  6. +
  7. Conclusion Statement
  8. +
  9. + Definitions and Abbreviations +
      +
    1. Definitions
    2. +
    3. Abbreviations
    4. +
    +
  10. +
  11. Reference Documents
  12. +
  13. Document History
  14. +
+
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parameters
ParameterValue
Git Commit Component {{id}}{{data.repo.data.git.commit}}
Git Repo Component {{id}}{{data.repo.data.git.url}}
ODS Component Type {{id}}{{data.repo.type}}
Environment{{metadata.buildParameter.targetEnvironment}}
Change Description{{metadata.buildParameter.changeDescription}}
Version{{metadata.buildParameter.version}}
Config Item{{metadata.buildParameter.configItem}}
-
+
+

1Introduction

-
-

2Installation

-

Installations steps have been successfully conducted. Overall installation status:

+

+ This document describes the installation of the software-defined + component {{ data.repo.id }}. The installation is based on the corresponding Technical + Installation Plan (TIP) of Config Item: + {{ metadata.buildParameter.configItem }}. +

- - - - - -
StatusOK
+

+ The plan outlines additional chapters, namely + Installation Prerequisites (3) and + Environmental Conditions (4). +

-

2.1Jenkins

-

Jenkins Job has been successfully executed:

+

+ Installation plan reference: ITEMS Document Number + {{ metadata.version }}-{{ metadata.jenkins.buildNumber }}, Version: {{ metadata.referencedDocs.TIP }}. +

- - - - - - +

Parameters

+
NameValue
+ + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + +
Parameters
ParameterValue
+ Git Commit Component {{ id }} + + {{ data.repo.data.git.commit }} +
+ Git Repo Component {{ id }} + + {{ data.repo.data.git.url }} +
+ ODS Component Type {{ id }} + {{ data.repo.type }}
Environment + {{ metadata.buildParameter.targetEnvironment }} +
Change Description + {{ metadata.buildParameter.changeDescription }} +
Job Number{{metadata.jenkins.buildNumber}}Version + {{ metadata.buildParameter.version }} +
Job Name{{metadata.jenkins.jobName}}Config Item + {{ metadata.buildParameter.configItem }} +
+
+ +
+

2Installation

+

+ Installations steps have been successfully conducted. Overall + installation status: +

+ + - - + + - -
Build URL{{metadata.jenkins.buildUrl}}StatusOK
+ -

2.2Components

-

Note: {{deployNote}}

+

2.1Jenkins

+

Jenkins Job has been successfully executed:

- {{#data.repo}} -

The following components have been successfully installed:{{id}}

- {{#openShiftData}} - - {{#builds}} - -
- {{#each .}} +
+ + + + + + + + + + + + + + +
Job Number + {{ metadata.jenkins.buildNumber }} +
Job Name + {{ metadata.jenkins.jobName }} +
Build URL + {{ metadata.jenkins.buildUrl }} +
+ +

2.2Component

+

Note: {{ deployNote }}

+ + {{#data.repo}} +

+ The following component has been successfully installed: + {{ id }} +

+ {{/data.repo}} + + {{#openShiftData}} + {{#builds}} - Build Resource: {{@key}} -
- - - - - +
NameValue
{{#each .}} - - - + + Build Resource: + {{@key}} +
{{@key}}{{.}}
+ + {{#each .}} + + + + + {{/each}} + +
{{@key}}{{.}}
+ {{/each}} - - + + + {{/builds}} + {{/openShiftData}} + + {{^legacy}} + {{#deploymentMean}} + + + + Deployment +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Namespace + {{ namespace }} +
Managed by + {{ type }} +
+ Source repository + + + {{../data/repo/url}} +
+ Descriptor path + + {{ descriptorPath }} +
+ Environment configuration files + + {{{envConfigFiles}}} +
+ Global configuration files + + {{{configFiles}}} +
+ Configuration parameters + + {{{configParams}}} +
+ Default command line flags + + {{{defaultCmdLineArgs}}} +
+ Additional command line flags + + {{{additionalCmdLineArgs}}} +
+ + {{#deploymentStatus}} + + Deployment Result + + + + + + + + + + + + + + + + + + + +
Status + {{ deployStatus }} +
+ Result message + + {{ resultMessage }} +
Timestamp + {{ lastDeployed }} +
Resources + {{{resources}}} +
+ + {{/deploymentStatus}} + + + {{/deploymentMean}} + {{/legacy}} + + {{#legacy}} + {{#deploymentMean}} + + + + Deployment +
+ + + + + + {{#each .}} + + + + + {{/each}} + +
NameValue
{{@key}} + {{ this }} +
+ + - {{/each}} - - - {{/builds}} - {{#deployments}} - - - {{#each .}} + {{/deploymentMean}} + {{#openShiftData}} + {{#deployments}} - Deployment Resource: {{@key}} -
- - - - - +
NameValue
{{#each .}} - - - + + Deployment Resource: + {{@key}} +
{{@key}}{{this}}
+ + + + + + {{#each .}} + + + + + {{/each}} + +
NameValue
{{@key}} + {{ this }} +
+ {{/each}} - - + - {{/each}} - - - {{/deployments}} - - {{/openShiftData}} - {{/data.repo}} -
- -
-

3Diagnostics and Testing

-

Diagnostic steps have been successfully applied to the requested component.

- -

Diagnostic Status

- - - - - -
StatusOK
+ {{/deployments}} + {{/openShiftData}} + {{/legacy}} + +
-

Diagnostic Result

+
+

3Diagnostics and Testing

+

+ Diagnostic steps have been successfully applied to the requested + component. +

- {{#data.repo}} -

Component {{id}}

- - - - - - - - - +

Diagnostic Status

+
StepInstruction for TestingExpected ResultActual ResultPass / Fail
- - - - - + + - - - - - - - - -
1automated configuration appplication (Q/P environment)Configuration appliedConfiguration appliedpassStatusOK
2POD is runningPOD is in status runningPOD is in status runningpass
- {{/data.repo }} -
+ -
-

4Conclusion Statement

-

All deliverables of the Technical Installation Plan have been successfully executed and the signature of this Report verifies that the system has been installed according to all requirements stated in the Installation Plan or, in the event the requirements are not met, that the deviations and/or failures are properly documented and addressed.

-
+

Diagnostic Result

-
-

5Definitions and Abbreviations

+ {{#data.repo}} +

Component {{ id }}

+ + + + + + + + + + + + + + + + + + + + + + + + +
StepInstruction for TestingExpected ResultActual ResultPass / Fail
1 + Automated configuration appplication (Q/P + environment) + Configuration appliedConfiguration appliedPass
2 + Wait until all Pods, PVCs, Services, and minimum + number of Pods of a Deployment, StatefulSet, or + ReplicaSet are in a ready state + + Applicable resources are in ready state + + Applicable resources are in ready state + Pass
+ {{/data.repo}} +
-

5.1Definitions

- {{#if data.sections.sec5s1.show}} +
+

4Conclusion Statement

+

+ All deliverables of the Technical Installation Plan have been + successfully executed and the signature of this Report verifies + that the system has been installed according to all requirements + stated in the Installation Plan or, in the event the + requirements are not met, that the deviations and/or failures + are properly documented and addressed. +

+
+ +
+

5Definitions and Abbreviations

+ +

5.1Definitions

+ {{#if data.sections.sec5s1.show}} - +
{{{data.sections.sec5s1.content}}} + {{{data.sections.sec5s1.content}}} +
- {{else}} + {{else}}

N/A

- {{/if}} + {{/if}} -

5.2Abbreviations

- {{#if data.sections.sec5s2.show}} +

5.2Abbreviations

+ {{#if data.sections.sec5s2.show}} - +
{{{data.sections.sec5s2.content}}} + {{{data.sections.sec5s2.content}}} +
- {{else}} + {{else}}

N/A

- {{/if}} -
+ {{/if}} +
-
-

6Reference Documents

- - {{#if data.sections.sec6.show}} +
+

6Reference Documents

+
    +
  • + Technical Installation Plan ({{metadata.referencedDocs.TIP}}) +
  • +
+ {{#if data.sections.sec6.show}} - +
{{{data.sections.sec6.content}}} + {{{data.sections.sec6.content}}} +
- {{/if}} -
+ {{/if}} +
-
-

7Document History

- {{#if data.documentHistory}} - - - - - - - - - {{#each data.documentHistory}} - - - - + + {{/each}} + +
VersionDateAuthorChange Reference
{{{docVersion}}}See Summary of electronic document or signature page of printout. - {{{rational}}} -
- {{#each issueType}} - {{#if added}} - The following {{type}} were added: -
    - {{#each added}} -
  • {{key}}{{#if details}}: {{details}}{{/if}}
  • +
    +

    7Document History

    + {{#if data.documentHistory}} + + + + + + + + + {{#each data.documentHistory}} + + + + - - {{/each}} - -
    VersionDateAuthorChange Reference
    {{{docVersion}}} + See Summary of electronic document or signature page + of printout. + + {{{rational}}} +
    + {{#each issueType}} + {{#if added}} + The following {{ type }} were added: +
      + {{#each added}} +
    • + {{ key }}{{#if details}}: {{ details }}{{/if}} +
    • + {{/each}} +
    + {{/if}} + {{#if discontinued}} + The following {{ type }} were removed: +
      + {{#each discontinued}} +
    • + {{ key }}{{#if details}}: {{ details }}{{/if}} +
    • + {{/each}} +
    + {{/if}} + {{#if changed}} + The following {{ type }} were changed: +
      + {{#each changed}} +
    • + {{ key }} was previously {{ predecessors }}{{#if details}}: {{ details }}{{/if}} +
    • + {{/each}} +
    + {{/if}} +
    {{/each}} - - {{/if}} - {{#if discontinued}} - The following {{type}} were removed: -
      - {{#each discontinued}} -
    • {{key}}{{#if details}}: {{details}}{{/if}}
    • - {{/each}} -
    - {{/if}} - {{#if changed}} - The following {{type}} were changed: -
      - {{#each changed}} -
    • {{key}} was previously {{predecessors}}{{#if details}}: {{details}}{{/if}}
    • - {{/each}} -
    - {{/if}} -
    - {{/each}} -
    - {{/if}} - {{#if data.sections.sec7.show}} +
+ {{/if}} + {{#if data.sections.sec7.show}} - +
{{{data.sections.sec7.content}}} + {{{data.sections.sec7.content}}} +
- {{/if}} -
- + {{/if}} + +