aboutsummaryrefslogtreecommitdiffstats
path: root/3rd_party/static/testapi-ui/components
diff options
context:
space:
mode:
Diffstat (limited to '3rd_party/static/testapi-ui/components')
-rw-r--r--3rd_party/static/testapi-ui/components/about/about.html14
-rw-r--r--3rd_party/static/testapi-ui/components/about/templates/README.html237
-rw-r--r--3rd_party/static/testapi-ui/components/application/application.html663
-rw-r--r--3rd_party/static/testapi-ui/components/application/modal/confirmModal.html71
-rw-r--r--3rd_party/static/testapi-ui/components/auth/authPortal.html15
-rw-r--r--3rd_party/static/testapi-ui/components/directory/directory.html62
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/guidelines.html60
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html102
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html83
-rw-r--r--3rd_party/static/testapi-ui/components/home/home.html397
-rw-r--r--3rd_party/static/testapi-ui/components/profile/importPubKeyModal.html30
-rw-r--r--3rd_party/static/testapi-ui/components/profile/profile.html72
-rw-r--r--3rd_party/static/testapi-ui/components/profile/showPubKeyModal.html14
-rw-r--r--3rd_party/static/testapi-ui/components/results-report/partials/editTestModal.html118
-rw-r--r--3rd_party/static/testapi-ui/components/results-report/partials/fullTestListModal.html20
-rw-r--r--3rd_party/static/testapi-ui/components/results-report/partials/reportDetails.html84
-rw-r--r--3rd_party/static/testapi-ui/components/results-report/resultsReport.html57
-rw-r--r--3rd_party/static/testapi-ui/components/results/modal/sharedModal.html25
-rw-r--r--3rd_party/static/testapi-ui/components/results/results.html236
-rw-r--r--3rd_party/static/testapi-ui/components/sut/sut.html71
20 files changed, 1248 insertions, 1183 deletions
diff --git a/3rd_party/static/testapi-ui/components/about/about.html b/3rd_party/static/testapi-ui/components/about/about.html
index f356050..b8d152d 100644
--- a/3rd_party/static/testapi-ui/components/about/about.html
+++ b/3rd_party/static/testapi-ui/components/about/about.html
@@ -1,11 +1,13 @@
<hr>
<div class="about-sidebar">
- <a><div class="about-option"
- ng-click="ctrl.selectOption('about')"
- ng-class="{ 'about-active': ctrl.selected === 'about' }">
- About CVP
- </div></a>
+ <a>
+ <div class="about-option"
+ ng-click="ctrl.selectOption('about')"
+ ng-class="{ 'about-active': ctrl.selected === 'about' }">
+ About CVP
+ </div>
+ </a>
</div>
<div class="about-content">
- <div ng-include src="ctrl.template"></div>
+ <div ng-include src="ctrl.template"></div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/about/templates/README.html b/3rd_party/static/testapi-ui/components/about/templates/README.html
index cb4140e..538ffb8 100644
--- a/3rd_party/static/testapi-ui/components/about/templates/README.html
+++ b/3rd_party/static/testapi-ui/components/about/templates/README.html
@@ -1,131 +1,198 @@
<h2>Executive Summary</h2>
-<p>OPNFV® is offering OPNFV compliance verification through its Compliance Verification Program (CVP). The CVP verifies products (“Offerings”) that claim compliance to OPNFV.</p>
-<p>The OPNFV CVP is a compliance verification program intended to increase the awareness and adoption of OPNFV by demonstrating the readiness and availability of commercial products based on OPNFV. </p>
+<p>OPNFV® is offering OPNFV compliance verification through its Compliance Verification Program (CVP).
+The CVP verifies products (“Offerings”) that claim compliance to OPNFV.</p>
+<p>The OPNFV CVP is a compliance verification program intended to increase the awareness and adoption of
+OPNFV by demonstrating the readiness and availability of commercial products based on OPNFV.</p>
<p>The key objectives and benefits of the OPNFV CVP are to:</p>
<ul>
- <li>Help build the market for </li>
- <ul>
- <li>OPNFV-based infrastructure</li>
- <li>applications designed to run on that infrastructure</li>
- </ul>
- <li>Reduce adoption risks for end-users</li>
- <li>Decrease testing costs by verifying hardware and software platform interfaces and components </li>
- <li>Enhance interoperability</li>
+ <li>Help build the market for:</li>
+ <ul>
+ <li>OPNFV-based infrastructure</li>
+ <li>applications designed to run on that infrastructure</li>
+ </ul>
+ <li>Reduce adoption risks for end-users</li>
+ <li>Decrease testing costs by verifying hardware and software platform interfaces and components</li>
+ <li>Enhance interoperability</li>
</ul>
- <p>Verified products submitted by respective vendors are expected to differentiate themselves with different features and capabilities but remain compliant by implementing explicitly defined interfaces, behaviors, and key features.</p>
+<p>Verified products submitted by respective vendors are expected to differentiate themselves with different
+features and capabilities but remain compliant by implementing explicitly defined interfaces, behaviors, and
+key features.</p>
+
<h3>Purpose of This Document</h3>
-<p>This document defines the framework and governance of the OPNFV CVP, including the scope and objectives of the program, maintenance of program materials, compliance verification requirements and processes, trademark/logo usage guidelines, requirements for systems under compliance verification, and escalation procedures. </p>
-This document does not define compliance verification procedures. Compliance verification procedures are defined by the community under the oversight of the Technical Steering Committee.
-<p>The current scope of compliance verification is based on multiple sources: </p>
+<p>This document defines the framework and governance of the OPNFV CVP, including the scope and objectives of
+the program, maintenance of program materials, compliance verification requirements and processes, trademark/logo
+usage guidelines, requirements for systems under compliance verification, and escalation procedures.</p>
+<p>This document does not define compliance verification procedures. Compliance verification procedures are
+defined by the community under the oversight of the Technical Steering Committee.</p>
+<p>The current scope of compliance verification is based on multiple sources:</p>
<ul>
- <li>The latest release of OPNFV </li>
- <li>Informative ETSI NFV ISG specifications, specifically:</li>
+ <li>The latest release of OPNFV</li>
+ <li>Informative ETSI NFV ISG specifications, specifically:</li>
<ul>
-
- <li>Pre-deployment Testing: Report on Validation of NFV Environments and Services <a href="http://www.etsi.org/deliver/etsi_gs/NFV-TST/001_099/001/01.01.01_60/gs_NFV-TST001v010101p.pdf">http://www.etsi.org/deliver/etsi_gs/NFV-TST/001_099/001/01.01.01_60/gs_NFV-TST001v010101p.pdf</a></li>
+ <li>Pre-deployment Testing: Report on Validation of NFV Environments and Services
+ <a href="http://www.etsi.org/deliver/etsi_gs/NFV-TST/001_099/001/01.01.01_60/gs_NFV-TST001v010101p.pdf">
+ http://www.etsi.org/deliver/etsi_gs/NFV-TST/001_099/001/01.01.01_60/gs_NFV-TST001v010101p.pdf</a>
+ </li>
</ul>
</ul>
-<p>Please note that these sources are subject to further revisions and may be updated at some future time. The current compliance verification procedures are published by OPNFV.</p>
-
-
-
+<p>Please note that these sources are subject to further revisions and may be updated at some future time.
+The current compliance verification procedures are published by OPNFV.</p>
<h2>Program Management & Maintenance</h2>
<h3>Role of C&C Committee</h3>
-<p>The OPNFV Certification & Compliance (C&C) Committee, hereafter referred to as the Committee, serves as the CVP administrator on behalf of the OPNFV Board of Directors. The Committee is responsible for defining program governance, compliance verification strategy, and the overall scope of the compliance verification procedures. </p>
+<p>The OPNFV Certification & Compliance (C&C) Committee, hereafter referred to as the Committee, serves as the CVP
+administrator on behalf of the OPNFV Board of Directors. The Committee is responsible for defining program governance,
+compliance verification strategy, and the overall scope of the compliance verification procedures.</p>
+
<h3>Maintenance of Program Documents</h3>
-<p>Program documents, such as this document, produced by the Committee will be labeled using semantic versioning. That is, they will be labeled using MAJOR.MINOR.PATCH notation, where MAJOR, MINOR, and PATCH are non-negative integers.</p>
-<p>1.MAJOR version. Note: to avoid market confusion, the scope of compliance verification and other project documents is tied to the major version, and once approved by the Board of Directors, will not change until the next major release.</p>
-<p>2.MINOR version is used to denote significant functionality changes (e.g., addition/subtraction of compliance verification procedures and/or document sections). Changes to a minor version of an approved document require Board approval. It is a goal that minor changes should not affect the ability of a product to achieve compliance/qualification status.</p>
+<p>Program documents, such as this document, produced by the Committee will be labeled using semantic versioning.
+That is, they will be labeled using MAJOR.MINOR.PATCH notation, where MAJOR, MINOR, and PATCH are non-negative
+integers.</p>
+<p>1.MAJOR version. Note: to avoid market confusion, the scope of compliance verification and other project
+documents is tied to the major version, and once approved by the Board of Directors, will not change until the next
+major release.</p>
+<p>2.MINOR version is used to denote significant functionality changes (e.g., addition/subtraction of compliance
+verification procedures and/or document sections). Changes to a minor version of an approved document require Board
+approval. It is a goal that minor changes should not affect the ability of a product to achieve compliance/qualification
+status.</p>
<p>3.PATCH version is used to indicate error corrections or editorial changes.</p>
-<p>The scope of a particular version of the CVP requirements, test-cases, compliance verification checks, tools and results is tied to an OPNFV release. </p>
+<p>The scope of a particular version of the CVP requirements, test-cases, compliance verification checks, tools and
+results is tied to an OPNFV release.</p>
<h3>Maintenance of CVP compliance verification procedures</h3>
-<p>The overall CVP compliance verification scope tied to an OPNFV release is determined by the Committee. The OPNFV TSC defines and maintains the compliance verification procedures and associated tools. The scope is constrained to features, capabilities, components, and interfaces included in an OPNFV release that are generally available in the industry (e.g., through adoption by an upstream community). Compliance verification is evaluated using functional tests that focus on defined interfaces and/or behaviors without regard to the underlying system under test. In practice, testing exercises interfaces and/or behaviors developed or exposed by OPNFV. </p>
+<p>The overall CVP compliance verification scope tied to an OPNFV release is determined by the Committee. The OPNFV
+TSC defines and maintains the compliance verification procedures and associated tools. The scope is constrained to
+features, capabilities, components, and interfaces included in an OPNFV release that are generally available in the
+industry (e.g., through adoption by an upstream community). Compliance verification is evaluated using functional tests
+that focus on defined interfaces and/or behaviors without regard to the underlying system under test. In practice,
+testing exercises interfaces and/or behaviors developed or exposed by OPNFV.</p>
<h3>OPNFV Trademark/Logo Usage Guidelines</h3>
-
-<p>Because of its position in the industry as an Open Source Project maintained by the Linux Foundation, OPNFV cannot endorse any products or appear to endorse any products.</p>
+<p>Because of its position in the industry as an Open Source Project maintained by the Linux Foundation, OPNFV cannot
+endorse any products or appear to endorse any products.</p>
<h3>Use of the Term OPNFV Ready</h3>
-<p>Products that pass the CVP compliance verification suite may be labeled as “OPNFV Ready”. Products that are “OPNFV Ready” expose key features/behaviors of the OPNFV release.</p>
+<p>Products that pass the CVP compliance verification suite may be labeled as “OPNFV Ready”. Products that are
+“OPNFV Ready” expose key features/behaviors of the OPNFV release.</p>
<ul>
- <li>OPNFV Ready” asserts that a specific system under test</li>
- <ul>
- <li>Supply the key behaviors, functions, and related APIs of the OPNFV release</li>
- <li>Promotes the key values of the OPNFV release, e.g. based upon the open source project components that comprise the OPNFV release</li>
- <li>Performs basic NFV functions</li>
- <li>Is interoperable with the OPNFV release</li>
- <li>Suitable for further trials in an operator network</li>
- </ul>
- <li>OPNFV Ready” does not assert:</li>
- <ul>
- <li>Readiness for commercial deployment</li>
- </ul>
+ <li>OPNFV Ready” asserts that a specific system under test</li>
+ <ul>
+ <li>Supply the key behaviors, functions, and related APIs of the OPNFV release</li>
+ <li>Promotes the key values of the OPNFV release, e.g. based upon the open source project components that comprise
+ the OPNFV release</li>
+ <li>Performs basic NFV functions</li>
+ <li>Is interoperable with the OPNFV release</li>
+ <li>Suitable for further trials in an operator network</li>
+ </ul>
+ <li>OPNFV Ready” does not assert:</li>
+ <ul>
+ <li>Readiness for commercial deployment</li>
+ </ul>
</ul>
-
-<p>The OPNFV C&C Committee on behalf of the Board of Directors can award a product “OPNFV Ready” status. “OPNFV Ready”, therefore, may not be used in relation to a vendor’s product without first having met the requirements outlined in this document. </p>
-<p>Use of “Ready” must be used in conjunction with the OPNFV release name under which the product was verified (e.g., “OPNFV Colorado Ready”). This allows the OPNFV compliance/qualification standard to evolve over time as the OPNFV platform matures.</p>
-<p>Organizations applying for compliance verification shall use the Logo/Trademark solely for the Product/Technology that was verified to have met the requirements designated by The Committee with respect to the appropriate category. </p>
-They shall not use the Logo/Trademark for any product/technology other than the Product/Technology submitted for compliance verification even if it belongs to the appropriate category.
-<p>They shall only use the Logo/Trademark solely for the following purposes in order to: </p>
-
+<p>The OPNFV C&C Committee on behalf of the Board of Directors can award a product “OPNFV Ready” status. “OPNFV Ready”,
+therefore, may not be used in relation to a vendor’s product without first having met the requirements outlined in this
+document.</p>
+<p>Use of “Ready” must be used in conjunction with the OPNFV release name under which the product was verified
+(e.g., “OPNFV Colorado Ready”). This allows the OPNFV compliance/qualification standard to evolve over time as the
+OPNFV platform matures.</p>
+<p>Organizations applying for compliance verification shall use the Logo/Trademark solely for the Product/Technology
+that was verified to have met the requirements designated by The Committee with respect to the appropriate category.</p>
+<p>They shall not use the Logo/Trademark for any product/technology other than the Product/Technology submitted for
+compliance verification even if it belongs to the appropriate category.</p>
+<p>They shall only use the Logo/Trademark solely for the following purposes in order to:</p>
<ul>
- <li>promote OPNFV; </li>
- <li>indicate to procurers and users the information of interoperability for NFV infrastructure and applications; and </li>
- <li>indicate that the verified product meets all requirements set by the Committee for use of the Logo/Trademark. </li>
+ <li>promote OPNFV</li>
+ <li>indicate to procurers and users the information of interoperability for NFV infrastructure and applications</li>
+ <li>indicate that the verified product meets all requirements set by the Committee for use of the Logo/Trademark</li>
</ul>
-<p>Organizations shall not use the Logo/Trademark in any way that would associate it with any individual or company logo or brand, beyond the association to the specific platform to which it was awarded. </p>
-
-<p>They shall use the Logo/Trademark solely in accordance with the OPNFV Logo Style Guide which is prepared and amended by the Committee from time to time. Other than in association to the specific platform to which it was awarded, they shall not frame, post, upload, transmit or modify in any way, all or any part of the Logo, unless expressly authorized in writing by the Committee. </p>
-<p></p>
-<p>Organizations shall immediately notify the Committee if they suspect or discover that the Logo/Trademark is or will be used for any purposes other than the confirmed purposes or that the use conflicts with any of the representations hereof as a result of upgrading of its submitted product/technology. In the event that the above notification is provided, they shall provide the Committee with any and all information requested by the Committee in relation to the upgrading of the confirmed product/technology and all information in order to confirm the revised product/technology actually meets the requirements designated by the Committee with respect to the appropriate category. They shall not use the Logo/Trademark for any product/technology which does not meet the requirements designated by the Committee with respect to the confirmed category. </p>
-<p>Note: Such organizations will be held responsible for any illegal use of the Logo/Trademark by others. </p>
-<p>Organizations participating in the OPNFV CVP do not own any intellectual property rights in relation to the Logo/Trademark, program documents, or compliance verification procedures.</p>
-
-
-<h2>Compliance Verification & Application Requirements </h2>
+<p>Organizations shall not use the Logo/Trademark in any way that would associate it with any individual or company logo
+or brand, beyond the association to the specific platform to which it was awarded.</p>
+<p>They shall use the Logo/Trademark solely in accordance with the OPNFV Logo Style Guide which is prepared and amended
+by the Committee from time to time. Other than in association to the specific platform to which it was awarded, they
+shall not frame, post, upload, transmit or modify in any way, all or any part of the Logo, unless expressly authorized
+in writing by the Committee.</p>
+<p>Organizations shall immediately notify the Committee if they suspect or discover that the Logo/Trademark is or will
+be used for any purposes other than the confirmed purposes or that the use conflicts with any of the representations
+hereof as a result of upgrading of its submitted product/technology. In the event that the above notification is
+provided, they shall provide the Committee with any and all information requested by the Committee in relation to the
+upgrading of the confirmed product/technology and all information in order to confirm the revised product/technology
+actually meets the requirements designated by the Committee with respect to the appropriate category. They shall not use
+the Logo/Trademark for any product/technology which does not meet the requirements designated by the Committee with
+respect to the confirmed category.</p>
+<p>Note: Such organizations will be held responsible for any illegal use of the Logo/Trademark by others.</p>
+<p>Organizations participating in the OPNFV CVP do not own any intellectual property rights in relation to the
+Logo/Trademark, program documents, or compliance verification procedures.</p>
+
+
+<h2>Compliance Verification & Application Requirements</h2>
<h3>Compliance Verification Procedures Requirements</h3>
-<p>CVP compliance verification procedures leverage tests, compliance verification tools, test infrastructure and compliance verification program infrastructure defined and maintained by OPNFV projects which are included in an OPNFV release. The OPNFV TSC defines which compliance verification procedures are included as part of the CVP. Once published, the compliance verification procedure suites will not change until the next OPNFV release (except to fix bugs or errors), as described above.</p>
+<p>CVP compliance verification procedures leverage tests, compliance verification tools, test infrastructure and
+compliance verification program infrastructure defined and maintained by OPNFV projects which are included in an OPNFV
+release. The OPNFV TSC defines which compliance verification procedures are included as part of the CVP. Once published,
+the compliance verification procedure suites will not change until the next OPNFV release (except to fix bugs or
+errors), as described above.</p>
<p>OPNFV compliance verification is applicable to one or more of the following categories:</p>
-<ul>
- <li>1) Hardware Platform</li>
- <li>2) Software Platform (e.g, Virtual Infrastructure – NFVI, VIM, etc.)</li>
- <li>3) Applications (e.g., VNFs) </li>
- <li>4) Orchestration (End to End management)</li>
-</ul>
+<ol>
+ <li>Hardware Platform</li>
+ <li>Software Platform (e.g, Virtual Infrastructure – NFVI, VIM, etc.)</li>
+ <li>Applications (e.g., VNFs)</li>
+ <li>Orchestration (End to End management)</li>
+</ol>
<p>The scope of the criteria and requirements for each CVP release is set forth in an addendum to this document.</p>
<h3>Self-Compliance Verification</h3>
-<p>Organizations may conduct compliance verification using the OPNFV-designated tools at their facilities. The OPNFV-designated tools will ensure that the results were produced by an unaltered version of the tools, and that the results were unaltered. For example, this could be accomplished by digitally verifying the tools themselves, and signing the results file(s). Results MUST be submitted for review with application documentation and the logo usage agreement to OPNFV.</p>
+<p>Organizations may conduct compliance verification using the OPNFV-designated tools at their facilities. The
+OPNFV-designated tools will ensure that the results were produced by an unaltered version of the tools, and that the
+results were unaltered. For example, this could be accomplished by digitally verifying the tools themselves, and signing
+the results file(s). Results MUST be submitted for review with application documentation and the logo usage agreement to
+OPNFV.</p>
<h3>OPNFV Preferred Verification Labs</h3>
-<p>Vendors may request service from third parties to conduct OPNFV compliance verification and collect results. Compliance verification occurs as documented in “Self Compliance Verification” above. The compliance verification results and documentation may be submitted by the third party on behalf of the vendor requesting the use of an OPNFV Logo/Trademark.</p>
-<p>OPNFV may identify organizations providing third-party verification as Preferred Labs and list them on the OPNFV web site. OPNFV does not endorse or sponsor Preferred Labs’ services. Vendors are not required to use OPNFV Preferred Labs.</p>
+<p>Vendors may request service from third parties to conduct OPNFV compliance verification and collect results.
+Compliance verification occurs as documented in “Self Compliance Verification” above. The compliance verification
+results and documentation may be submitted by the third party on behalf of the vendor requesting the use of an OPNFV
+Logo/Trademark.</p>
+<p>OPNFV may identify organizations providing third-party verification as Preferred Labs and list them on the OPNFV web
+site. OPNFV does not endorse or sponsor Preferred Labs’ services. Vendors are not required to use OPNFV Preferred
+Labs.</p>
<h3>Compliance Application Requirements</h3>
-<p>The use of the OPNFV Ready logo is not restricted to OPNFV member companies. The request for use of an OPNFV Logo/Trademark must state the organization, a contact person (email and telephone number); their postal address; the location where the verification results and documentation was prepared, the category or categories the product is requesting an OPNFV Logo/Trademark(s) for; the attestation stating they will abide by OPNFV policies and procedures for use of an OPNFV Logo/Trademark; any third-party lab conducting the verification; and the product identifier.</p>
+<p>The use of the OPNFV Ready logo is not restricted to OPNFV member companies. The request for use of an OPNFV
+Logo/Trademark must state the organization, a contact person (email and telephone number); their postal address; the
+location where the verification results and documentation was prepared, the category or categories the product is
+requesting an OPNFV Logo/Trademark(s) for; the attestation stating they will abide by OPNFV policies and procedures for
+use of an OPNFV Logo/Trademark; any third-party lab conducting the verification; and the product identifier.</p>
<h3>Review Process</h3>
-<p>The compliance verification results and documentation submitted will be reviewed by the Committee for completeness and validity. Based on the determination of the Committee, a recommendation will be made to the OPNFV Board of Directors regarding the approval of the granting of permission to use an OPNFV Logo/Trademark.</p>
+<p>The compliance verification results and documentation submitted will be reviewed by the Committee for completeness
+and validity. Based on the determination of the Committee, a recommendation will be made to the OPNFV Board of Directors
+regarding the approval of the granting of permission to use an OPNFV Logo/Trademark.</p>
<p>The Committee may request additional information regarding the application for use of an OPNFV Logo/Trademark.</p>
-<p>OPNFV may charge a reasonable fee for reviewing results. Reviews will be conducted by OPNFV member companies participating in the review committee (a C&C subcommittee). No member company may review its own compliance verification results.</p>
-<p>In the event of a dispute, the submitting organization has a right to appeal the decision with the OPNFV Board of Directors. An appeals process is documented in the Escalation Process below.</p>
+<p>OPNFV may charge a reasonable fee for reviewing results. Reviews will be conducted by OPNFV member companies
+participating in the review committee (a C&C subcommittee). No member company may review its own compliance verification
+results.</p>
+<p>In the event of a dispute, the submitting organization has a right to appeal the decision with the OPNFV Board of
+Directors. An appeals process is documented in the Escalation Process below.</p>
<h2>System Under Compliance Verification Requirements</h2>
<p>The compliance verification environment (hardware and software) is defined by the OPNFV TSC.</p>
<h3>Similarity Policy</h3>
-
-<p>Hardware platforms identified as similar to platforms that have passed CVP compliance verification procedures may apply to use the OPNFV Ready trademark. The C&C Committee can decide to grant “OPNFV Ready” to products designated “under similarity”. The Committee will consider similarity in the following areas (for example):</p>
+<p>Hardware platforms identified as similar to platforms that have passed CVP compliance verification procedures may
+apply to use the OPNFV Ready trademark. The C&C Committee can decide to grant “OPNFV Ready” to products designated
+“under similarity”. The Committee will consider similarity in the following areas (for example):</p>
<ul>
- <li>Compute</li>
- <li>Network</li>
- <li>Storage</li>
+ <li>Compute</li>
+ <li>Network</li>
+ <li>Storage</li>
</ul>
-<p>Hardware platforms receiving rights to use the Logo/Trademark “under similarity” will be so designated on the website.</p>
+<p>Hardware platforms receiving rights to use the Logo/Trademark “under similarity” will be so designated on the
+website.</p>
<h2>Escalation Process</h2>
-<p>If, after submitting compliance verification results and documentation, a vendor believes its results were evaluated unfairly or if it identifies issues with the test plan, tools, or third party lab, it may send an appeal in writing to the Committee. The Committee will review the appeal in a reasonable timeframe and respond in writing.</p>
-<p>If the vendor wishes to appeal further, it may send a further appeal in writing to the OPNFV Board of Directors. The Board will evaluate the appeal at its next regular meeting.</p>
+<p>If, after submitting compliance verification results and documentation, a vendor believes its results were evaluated
+unfairly or if it identifies issues with the test plan, tools, or third party lab, it may send an appeal in writing to
+the Committee. The Committee will review the appeal in a reasonable timeframe and respond in writing.</p>
+<p>If the vendor wishes to appeal further, it may send a further appeal in writing to the OPNFV Board of Directors. The
+Board will evaluate the appeal at its next regular meeting.</p>
diff --git a/3rd_party/static/testapi-ui/components/application/application.html b/3rd_party/static/testapi-ui/components/application/application.html
index 307fe6a..6bd62f4 100644
--- a/3rd_party/static/testapi-ui/components/application/application.html
+++ b/3rd_party/static/testapi-ui/components/application/application.html
@@ -1,323 +1,337 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
- <meta charset="utf-8">
- <title>Logo Request &raquo; OpenStack Open Source Cloud Computing Software</title>
-
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
-
-<link rel="stylesheet" href="testapi-ui/assets/css/combine.css" />
+<!DOCTYPE html>
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <title>Logo Request &raquo; OpenStack Open Source Cloud Computing Software</title>
+ <link rel="stylesheet" href="testapi-ui/assets/css/combine.css" />
+</head>
<body id="logo-request">
-
-
-<div class="container-fluid common-main-container">
-<div class="top-site-banner">
- <div class="container">
- <!--<p>-->
- <p class="p1">Complete this application then start your CVP journey</p>
- <!--
- <a href="https://www.openstack.org/summit/sydney-2017/" class="top-site-banner-button">Register now</a>
- -->
- <!--</p>-->
+ <div class="container-fluid common-main-container">
+ <div class="top-site-banner">
+ <div class="container">
+ <p class="p1">Complete this application then start your CVP journey</p>
+ </div>
</div>
-</div>
-
-<div class="row" style="margin-top:20px">
- <div class="col-lg-12 container">
- <!--
- <h1>Request information on OpenStack trademark licensing</h1>
- <p>If you plan to offer an OpenStack-related product or service using a trademark or brand that includes an OpenStack mark (e.g. logo or the word OpenStack), you are required to apply for and obtain a trademark license. We@~Yve created a family of logos and a set of standards specifically for this pp
-urpose. Once we understand more about your product or service, we can determine which (if any) logo program it falls under, and send you the appropriate license for signature. </p>
- -->
- <form id="OsLogoProgramForm_Form" action="/brand/logo-request/Form" method="post" enctype="application/x-www-form-urlencoded">
- <p id="OsLogoProgramForm_Form_error" class="message " style="display: none"></p>
- <fieldset>
- <div class="field text col-md-4">
- <label class="left" >Organization name</label>
- <i uib-tooltip="Organization name" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.organization_name" required="required" aria-required="true" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Organization website (if public)</label>
- <i uib-tooltip="Organization website if it is public" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.organization_web" required="required" aria-required="true" />
- </div>
- </div>
- <div class="col-md-4"></div>
- <div class="field email text col-md-4">
- <label class="left">Product name and/or identifier</label>
- <i uib-tooltip="Product name and/or identifier" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<div class="middleColumn">
- <input type="text" class="email text form-control" ng-model="ctrl.product_name" required="required" aria-required="true" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Product specifications</label>
- <i uib-tooltip="A link of product specifications" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.product_spec" required="required" aria-required="true" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Product public documentation</label>
- <i uib-tooltip="A link of product public documentation" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.product_documentation" required="required" aria-required="true" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Product categories</label>
- <i uib-tooltip="Product categories" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<div class="middleColumn">
- <select class="form-control" ng-model="ctrl.product_categories">
- <option value="soft&hard">software and hardware</option>
- <option value="soft&3rd">software and third party hardware</option>
- </select>
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Primary contact name</label>
- <i uib-tooltip="Primary contact name" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.prim_name" required="required" aria-required="true" />
- </div>
- </div><div class="field text col-md-4">
- <label class="left">Primary business email</label>
- <i uib-tooltip="Only the Business email address should be used for official communication with OPNFV CVP" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.prim_email" required="required" aria-required="true" />
- </div>
- </div><div class="field text col-md-4">
- <label class="left">Primary postal address</label>
- <i uib-tooltip="Primary postal address" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.prim_address" required="required" aria-required="true" />
- </div>
- </div><div class="field text col-md-4">
- <label class="left">Primary phone number</label>
- <i uib-tooltip="Primary phone number" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.prim_phone" required="required" aria-required="true" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">User ID Type</label>
- <i uib-tooltip="User ID Type" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <select class="form-control" ng-model="ctrl.id_type">
- <option value="Linux Foundation">Linux Foundation</option>
- <option value="Openstack">Openstack</option>
- <option value="Github">Github</option>
- <option value="Google">Google</option>
- <option value="Fackbook">Fackbook</option>
- </select>
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">User ID for CVP web portal</label>
- <i uib-tooltip="User ID for CVP web portal" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.user_id" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Description</label>
- <i uib-tooltip="Product Description" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.description" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">SUT Version</label>
- <i uib-tooltip="SUT Version" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.sut_version" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">SUT HW Version</label>
- <i uib-tooltip="SUT HW Version - leave blank if not applicable" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.sut_hw_version" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">OVP Version</label>
- <i uib-tooltip="OVP Version" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.ovp_version" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">OVP Category</label>
- <i uib-tooltip="OVP Category" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.ovp_category" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Company Logo</label>
- <i uib-tooltip="Company Logo" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.company_logo" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Approve Date</label>
- <i uib-tooltip="Approve Date - YYYY-MM-DD" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.approve_date" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Approved</label>
- <i uib-tooltip="Approved - insert true or false" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.approved" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Test ID</label>
- <i uib-tooltip="Test ID - enter approved test_id" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <input type="text" class="text form-control" ng-model="ctrl.test_id" />
- </div>
- </div>
- <div class="field text col-md-4">
- <label class="left">Location</label>
- <i uib-tooltip="Location" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
- <div class="middleColumn">
- <select class="form-control" ng-model="ctrl.lab_location">
- <option value="internal">internal vendor lab</option>
- <option value="third">third-party lab</option>
- </select>
- </div>
- </div>
- <div ng-if="ctrl.lab_location=='third'" class="field text">
- <div class="field text col-md-4">
- <label class="left">Lab Name</label>
- <i uib-tooltip="Lab Name" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<input type="text" class="text form-control" ng-model="ctrl.lab_name"/>
- </div>
- <div class="field text col-md-4">
- <label class="left">Lab Email</label>
- <i uib-tooltip="Lab Email" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<input type="text" class="text form-control" ng-model="ctrl.lab_email"/>
- </div>
- <div class="field text col-md-4">
- <label class="left">Lab Address</label>
- <i uib-tooltip="Lab Address" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<input type="text" class="text form-control" ng-model="ctrl.lab_address"/>
- </div>
- <div class="field text col-md-4">
- <label class="left">Lab Phone Number</label>
- <i uib-tooltip="Lab Phone Number" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
-<input type="text" class="text form-control" ng-model="ctrl.lab_phone"/>
- </div>
- </div>
- </fieldset>
- </form>
- </div>
-</div>
-<div class="Actions">
- <button class="btn btn-success cvp-btn" ng-click="ctrl.openConfirmModal()">Submit</button>
-</div>
-<div class="results-table" style="margin-top:30px;overflow:scroll">
- <table class="table table-striped table-hover">
+ <div class="row" style="margin-top: 20px;">
+ <div class="col-lg-12 container">
+ <form id="OsLogoProgramForm_Form" action="/brand/logo-request/Form" method="post"
+ enctype="application/x-www-form-urlencoded">
+ <p id="OsLogoProgramForm_Form_error" class="message" style="display: none;"></p>
+ <fieldset>
+ <div class="field text col-md-4">
+ <label class="left" >Organization name</label>
+ <i uib-tooltip="Organization name" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.organization_name" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Organization website (if public)</label>
+ <i uib-tooltip="Organization website if it is public"
+ class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.organization_web" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="col-md-4"></div>
+ <div class="field email text col-md-4">
+ <label class="left">Product name and/or identifier</label>
+ <i uib-tooltip="Product name and/or identifier" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="email text form-control" ng-model="ctrl.product_name" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Product specifications</label>
+ <i uib-tooltip="A link of product specifications"
+ class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.product_spec" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Product public documentation</label>
+ <i uib-tooltip="A link of product public documentation"
+ class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.product_documentation" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Product categories</label>
+ <i uib-tooltip="Product categories" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <select class="form-control" ng-model="ctrl.product_categories">
+ <option value="soft&hard">software and hardware</option>
+ <option value="soft&3rd">software and third party hardware</option>
+ </select>
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Primary contact name</label>
+ <i uib-tooltip="Primary contact name" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.prim_name" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Primary business email</label>
+ <i uib-tooltip="Only the Business email address should be used for official communication with OPNFV CVP"
+ class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.prim_email" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Primary postal address</label>
+ <i uib-tooltip="Primary postal address" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.prim_address" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Primary phone number</label>
+ <i uib-tooltip="Primary phone number" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.prim_phone" required="required"
+ aria-required="true" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">User ID Type</label>
+ <i uib-tooltip="User ID Type" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <select class="form-control" ng-model="ctrl.id_type">
+ <option value="Linux Foundation">Linux Foundation</option>
+ <option value="Openstack">Openstack</option>
+ <option value="Github">Github</option>
+ <option value="Google">Google</option>
+ <option value="Fackbook">Fackbook</option>
+ </select>
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">User ID for CVP web portal</label>
+ <i uib-tooltip="User ID for CVP web portal" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.user_id" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Description</label>
+ <i uib-tooltip="Product Description" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.description" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">SUT Version</label>
+ <i uib-tooltip="SUT Version" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.sut_version" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">SUT HW Version</label>
+ <i uib-tooltip="SUT HW Version - leave blank if not applicable"
+ class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.sut_hw_version" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">OVP Version</label>
+ <i uib-tooltip="OVP Version" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.ovp_version" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">OVP Category</label>
+ <i uib-tooltip="OVP Category" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.ovp_category" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Company Logo</label>
+ <i uib-tooltip="Company Logo" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.company_logo" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Approve Date</label>
+ <i uib-tooltip="Approve Date - YYYY-MM-DD" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.approve_date" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Approved</label>
+ <i uib-tooltip="Approved - insert true or false" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.approved" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Test ID</label>
+ <i uib-tooltip="Test ID - enter approved test_id"
+ class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <input type="text" class="text form-control" ng-model="ctrl.test_id" />
+ </div>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Location</label>
+ <i uib-tooltip="Location" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <div class="middleColumn">
+ <select class="form-control" ng-model="ctrl.lab_location">
+ <option value="internal">internal vendor lab</option>
+ <option value="third">third-party lab</option>
+ </select>
+ </div>
+ </div>
+ <div ng-if="ctrl.lab_location=='third'" class="field text">
+ <div class="field text col-md-4">
+ <label class="left">Lab Name</label>
+ <i uib-tooltip="Lab Name" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <input type="text" class="text form-control" ng-model="ctrl.lab_name"/>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Lab Email</label>
+ <i uib-tooltip="Lab Email" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <input type="text" class="text form-control" ng-model="ctrl.lab_email"/>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Lab Address</label>
+ <i uib-tooltip="Lab Address" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <input type="text" class="text form-control" ng-model="ctrl.lab_address"/>
+ </div>
+ <div class="field text col-md-4">
+ <label class="left">Lab Phone Number</label>
+ <i uib-tooltip="Lab Phone Number" class="glyphicon glyphicon-question-sign opnfv-blue"></i>
+ <input type="text" class="text form-control" ng-model="ctrl.lab_phone"/>
+ </div>
+ </div>
+ </fieldset>
+ </form>
+ </div>
+ </div>
+ <div class="Actions">
+ <button class="btn btn-success cvp-btn" ng-click="ctrl.openConfirmModal()">Submit</button>
+ </div>
+ <div class="results-table" style="margin-top: 30px; overflow: scroll;">
+ <table class="table table-striped table-hover">
<thead>
- <tr>
- <th>Create Date</th>
- <th>Organization name</th>
- <th>Organization website</th>
- <th>Product name</th>
- <th>Product specifications</th>
- <th>Product documentation</th>
- <th>Product categories</th>
- <th>Primary contact name</th>
- <th>Primary business email</th>
- <th>Primary postal address</th>
- <th>Primary phone number</th>
- <th>User ID Type</th>
- <th>User ID</th>
- <th>Description</th>
- <th>SUT version</th>
- <th>SUT HW version</th>
- <th>OVP version</th>
- <th>OVP category</th>
- <th>Company logo</th>
- <th>Approve date</th>
- <th>Approved</th>
- <th>Test ID</th>
- <th>Location</th>
- <th>Operation</th>
- </tr>
+ <tr>
+ <th>Create Date</th>
+ <th>Organization name</th>
+ <th>Organization website</th>
+ <th>Product name</th>
+ <th>Product specifications</th>
+ <th>Product documentation</th>
+ <th>Product categories</th>
+ <th>Primary contact name</th>
+ <th>Primary business email</th>
+ <th>Primary postal address</th>
+ <th>Primary phone number</th>
+ <th>User ID Type</th>
+ <th>User ID</th>
+ <th>Description</th>
+ <th>SUT version</th>
+ <th>SUT HW version</th>
+ <th>OVP version</th>
+ <th>OVP category</th>
+ <th>Company logo</th>
+ <th>Approve date</th>
+ <th>Approved</th>
+ <th>Test ID</th>
+ <th>Location</th>
+ <th>Operation</th>
+ </tr>
</thead>
- <script type="text/ng-template" id="product.tpl.html">
- <div class="input-group">
- <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
- <input type="text" value="{{app.product_spec}}">
- </div>
- <div class="input-group">
- <span class="input-group-addon">@</span>
- <input type="text" value="{{app.product_documentation}}">
- </div>
- <div class="input-group">
- <span class="input-group-addon"><i class="glyphicon glyphicon-map-marker"></i></span>
- <input type="text" value="{{app.product_categories | category}}">
- </div>
- </script>
- <script type="text/ng-template" id="lab.tpl.html">
- <div class="input-group">
- <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
- <input type="text" value="{{app.lab_name}}">
- </div>
- <div class="input-group">
- <span class="input-group-addon">@</span>
- <input type="text" value="{{app.lab_email}}">
- </div>
- <div class="input-group">
- <span class="input-group-addon"><i class="glyphicon glyphicon-map-marker"></i></span>
- <input type="text" value="{{app.lab_address}}">
- </div>
- <div class="input-group">
- <span class="input-group-addon"><i class="glyphicon glyphicon-phone"></i></span>
- <input type="text" value="{{app.lab_phone}}">
- </div>
- </script>
+ <script type="text/ng-template" id="product.tpl.html">
+ <div class="input-group">
+ <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
+ <input type="text" value="{{app.product_spec}}">
+ </div>
+ <div class="input-group">
+ <span class="input-group-addon">@</span>
+ <input type="text" value="{{app.product_documentation}}">
+ </div>
+ <div class="input-group">
+ <span class="input-group-addon"><i class="glyphicon glyphicon-map-marker"></i></span>
+ <input type="text" value="{{app.product_categories | category}}">
+ </div>
+ </script>
+ <script type="text/ng-template" id="lab.tpl.html">
+ <div class="input-group">
+ <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
+ <input type="text" value="{{app.lab_name}}">
+ </div>
+ <div class="input-group">
+ <span class="input-group-addon">@</span>
+ <input type="text" value="{{app.lab_email}}">
+ </div>
+ <div class="input-group">
+ <span class="input-group-addon"><i class="glyphicon glyphicon-map-marker"></i></span>
+ <input type="text" value="{{app.lab_address}}">
+ </div>
+ <div class="input-group">
+ <span class="input-group-addon"><i class="glyphicon glyphicon-phone"></i></span>
+ <input type="text" value="{{app.lab_phone}}">
+ </div>
+ </script>
<tbody style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
- <tr ng-repeat="app in ctrl.applications">
- <td>{{ app.creation_date | limitTo: 10 }}</td>
- <td>{{ app.organization_name }}</td>
- <td><a href="{{app.organization_web}}">{{ app.organization_web }}</a></td>
- <td>{{ app.product_name}}</td>
- <td><a href="{{app.product_spec}}">{{app.product_spec}}</a></td>
- <td><a href="{{app.product_documentation}}">{{app.product_documentation}}</a></td>
- <td>{{ app.product_categories | category }}</td>
- <td>{{ app.prim_name }}</td>
- <td>{{ app.prim_email }}</td>
- <td>{{ app.prim_address }}</td>
- <td>{{ app.prim_phone }}</td>
- <td>{{ app.id_type }}</td>
- <td>{{ app.user_id }}</td>
- <td>{{ app.description }}</td>
- <td>{{ app.sut_version }}</td>
- <td>{{ app.sut_hw_version }}</td>
- <td>{{ app.ovp_version }}</td>
- <td>{{ app.ovp_category }}</td>
- <td>{{ app.company_logo }}</td>
- <td>{{ app.approve_date }}</td>
- <td>{{ app.approved }}</td>
- <td>{{ app.test_id }}</td>
- <td><span popover-enable="app.lab_location != 'internal'" uib-popover-template="ctrl.lab_tpl" popover-title="Lab Info" popover-placement="top" popover-trigger="mouseenter">{{ app.lab_location | labLocation}}</span><i ng-if="app.lab_location != 'internal'" class="glyphicon glyphicon-info-sign opnfv-blue"></i></td>
- <td><a ng-click="ctrl.deleteApp(app._id)" class="badge badge-info"><i class="glyphicon glyphicon-remove" ></i></a></td>
- </tr>
+ <tr ng-repeat="app in ctrl.applications">
+ <td>{{ app.creation_date | limitTo: 10 }}</td>
+ <td>{{ app.organization_name }}</td>
+ <td><a href="{{app.organization_web}}">{{ app.organization_web }}</a></td>
+ <td>{{ app.product_name}}</td>
+ <td><a href="{{app.product_spec}}">{{app.product_spec}}</a></td>
+ <td><a href="{{app.product_documentation}}">{{app.product_documentation}}</a></td>
+ <td>{{ app.product_categories | category }}</td>
+ <td>{{ app.prim_name }}</td>
+ <td>{{ app.prim_email }}</td>
+ <td>{{ app.prim_address }}</td>
+ <td>{{ app.prim_phone }}</td>
+ <td>{{ app.id_type }}</td>
+ <td>{{ app.user_id }}</td>
+ <td>{{ app.description }}</td>
+ <td>{{ app.sut_version }}</td>
+ <td>{{ app.sut_hw_version }}</td>
+ <td>{{ app.ovp_version }}</td>
+ <td>{{ app.ovp_category }}</td>
+ <td>{{ app.company_logo }}</td>
+ <td>{{ app.approve_date }}</td>
+ <td>{{ app.approved }}</td>
+ <td>{{ app.test_id }}</td>
+ <td>
+ <span popover-enable="app.lab_location != 'internal'" uib-popover-template="ctrl.lab_tpl"
+ popover-title="Lab Info" popover-placement="top"
+ popover-trigger="mouseenter">{{ app.lab_location | labLocation}}</span>
+ <i ng-if="app.lab_location != 'internal'" class="glyphicon glyphicon-info-sign opnfv-blue"></i>
+ </td>
+ <td>
+ <a ng-click="ctrl.deleteApp(app._id)" class="badge badge-info">
+ <i class="glyphicon glyphicon-remove" ></i>
+ </a>
+ </td>
+ </tr>
</tbody>
- </table>
+ </table>
- <div class="pages">
+ <div class="pages">
<uib-pagination
total-items="ctrl.totalItems"
ng-model="ctrl.currentPage"
@@ -329,20 +343,23 @@ urpose. Once we understand more about your product or service, we can determine
num-pages="ctrl.numPages"
ng-change="ctrl.updatePage()">
</uib-pagination>
+ </div>
</div>
-</div>
-<div>
- <br>
- <h3>Company Logo Upload for Directory</h3>
- <form enctype="multipart/form-data" method="post">
+ <div>
+ <br>
+ <h3>Company Logo Upload for Directory</h3>
+ <form enctype="multipart/form-data" method="post">
<div class="form-group col-m-3">
- <input class="form-contrl btn btn-success cvp-btn medium accent-color regular-button" file-model="logoFile" type="file">
+ <input class="form-contrl btn btn-success cvp-btn medium accent-color regular-button" file-model="logoFile"
+ type="file">
</div>
<div class="form-group col-m-3">
- <a class="btn btn-success cvp-btn medium accent-color regular-button" ng-click="ctrl.uploadLogo()"><span>Upload Logo</span></a>
+ <a class="btn btn-success cvp-btn medium accent-color regular-button" ng-click="ctrl.uploadLogo()">
+ <span>Upload Logo</span>
+ </a>
</div>
- </form>
-</div>
-
-</div>
+ </form>
+ </div>
+ </div>
+</body>
diff --git a/3rd_party/static/testapi-ui/components/application/modal/confirmModal.html b/3rd_party/static/testapi-ui/components/application/modal/confirmModal.html
index 749315d..11c34c5 100644
--- a/3rd_party/static/testapi-ui/components/application/modal/confirmModal.html
+++ b/3rd_party/static/testapi-ui/components/application/modal/confirmModal.html
@@ -1,43 +1,46 @@
<div>
- <div class="row" style="margin-top:20px">
- <div class="col-sm-offset-1 col-sm-11">
- <div>
- <label class="col-sm-3">Organization name: </label>
- <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.organization_name" disabled>
- </div>
- <div>
- <label class="col-sm-3">Organization website: </label>
- <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.organization_web" disabled>
- </div>
- <div>
- <label class="col-sm-3">Product name: </label>
- <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.product_name" disabled>
- </div>
- <div>
- <label class="col-sm-3">Product documentation: </label>
- <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.product_categories" disabled>
- </div>
- <div>
- <label class="col-sm-3">User ID: </label>
- <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.user_id" disabled>
- </div>
- </div>
- <div class="btn-group col-sm-offset-5 application-modal-button" role="group">
- <button type="button" class="btn btn-default" ng-click="ctrl.submitForm()">Confirm</button>
- <button type="button" class="btn btn-default" style="margin-left:20px" ng-click="ctrl.cancelSubmit()">Cancel</button>
- </div>
- </div>
+ <div class="row" style="margin-top:20px">
+ <div class="col-sm-offset-1 col-sm-11">
+ <div>
+ <label class="col-sm-3">Organization name: </label>
+ <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.organization_name" disabled>
+ </div>
+ <div>
+ <label class="col-sm-3">Organization website: </label>
+ <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.organization_web" disabled>
+ </div>
+ <div>
+ <label class="col-sm-3">Product name: </label>
+ <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.product_name" disabled>
+ </div>
+ <div>
+ <label class="col-sm-3">Product documentation: </label>
+ <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.product_categories" disabled>
+ </div>
+ <div>
+ <label class="col-sm-3">User ID: </label>
+ <input type="text" class="text col-sm-7 application-modal-text" ng-model="ctrl.user_id" disabled>
+ </div>
+ </div>
+ <div class="btn-group col-sm-offset-5 application-modal-button" role="group">
+ <button type="button" class="btn btn-default" ng-click="ctrl.submitForm()">Confirm</button>
+ <button type="button" class="btn btn-default" style="margin-left:20px" ng-click="ctrl.cancelSubmit()">
+ Cancel</button>
+ </div>
+ </div>
</div>
<style>
-.ngdialog.ngdialog-theme-default.custom-width-60 .ngdialog-content {
+ .ngdialog.ngdialog-theme-default.custom-width-60 .ngdialog-content {
width: 50%;
-}
-.application-modal-text {
+ }
+
+ .application-modal-text {
margin-bottom: 5px;
-}
-.application-modal-button {
+ }
+
+ .application-modal-button {
margin-top: 10px;
margin-bottom: 20px;
-}
+ }
</style>
diff --git a/3rd_party/static/testapi-ui/components/auth/authPortal.html b/3rd_party/static/testapi-ui/components/auth/authPortal.html
index 8232769..86d3d35 100644
--- a/3rd_party/static/testapi-ui/components/auth/authPortal.html
+++ b/3rd_party/static/testapi-ui/components/auth/authPortal.html
@@ -3,19 +3,16 @@
<div class="row">
<div class="col-xs-6 col-md-3">
<a ng-click="auth.doSignIn('cas')" class="thumbnail">
- <img style="width:256px;height:64px" src="https://identity.linuxfoundation.org/sites/all/themes/lfidentity/lflogo2016_color.png" alt="LinuxFoundationID">
+ <img style="width: 256px; height: 64px;"
+ src="https://identity.linuxfoundation.org/sites/all/themes/lfidentity/lflogo2016_color.png"
+ alt="LinuxFoundationID">
</a>
</div>
<div class="col-xs-6 col-md-3">
<a ng-click="auth.doSignIn('openstack')" class="thumbnail">
- <img style="width:256px;height:64px" src="https://www.openstack.org/themes/openstack/images/openstack-logo-full.svg" alt="OPENSTACK">
+ <img style="width: 256px; height: 64px;"
+ src="https://www.openstack.org/themes/openstack/images/openstack-logo-full.svg"
+ alt="OPENSTACK">
</a>
</div>
- <!--
- <div class="col-xs-6 col-md-3">
- <a ng-click="auth.doSignIn('jira')" class="thumbnail">
- <img style="width:256px;height:64px" src="https://www.linuxfoundation.org/themes/custom/linux_foundation/logo.svg" alt="LinuxFoundationID">
- </a>
- </div>
- -->
</div>
diff --git a/3rd_party/static/testapi-ui/components/directory/directory.html b/3rd_party/static/testapi-ui/components/directory/directory.html
index 1174752..535110e 100644
--- a/3rd_party/static/testapi-ui/components/directory/directory.html
+++ b/3rd_party/static/testapi-ui/components/directory/directory.html
@@ -1,34 +1,32 @@
<div class="container-fluid common-main-container">
- <h3>OPNFV Verified Product Directory</h3>
-
- <div>
- <h4>Compliance Marks Granted to {{ctrl.companyID}}</h4>
- <img class="" src="api/v1/cvp/applications/getlogo/{{ctrl.company_logo}}" />
- <table class="table table-striped table-hover">
- <thead>
- <tr class="">
- <th>Product</th>
- <th>Description</th>
- <th>OVP Cateogry</th>
- <th>OVP Version</th>
- <th>Product Info</th>
- <th>SUT Version</th>
- <th>SUT HW Version</th>
- </tr>
- </thead>
- <tbody class="directory_inner" style=" overflow: hidden; text-overflow: ellipsis;">
- <tr style="vertical-align: center;" ng-repeat="prod in ctrl.directory" ng-if="prod.organization_name==ctrl.companyID && prod.approved=='true'">
- <td width="250">{{ prod.product_name}}</td>
- <td width="350">{{ prod.description}}</td>
- <td width="150">{{ prod.ovp_category}}</td>
- <td width="150">{{ prod.ovp_version}}</td>
- <td><a href="{{ prod.product_documentation}}" target="_blank">{{ prod.product_documentation}}</a></td>
- <td width="150">{{ prod.sut_version}}</td>
- <td width="150">{{ prod.sut_hw_version}}</td>
- </tr>
- </tbody>
- </table>
-
- </div>
-
+ <h3>OPNFV Verified Product Directory</h3>
+ <div>
+ <h4>Compliance Marks Granted to {{ctrl.companyID}}</h4>
+ <img src="api/v1/cvp/applications/getlogo/{{ctrl.company_logo}}" />
+ <table class="table table-striped table-hover">
+ <thead>
+ <tr>
+ <th>Product</th>
+ <th>Description</th>
+ <th>OVP Cateogry</th>
+ <th>OVP Version</th>
+ <th>Product Info</th>
+ <th>SUT Version</th>
+ <th>SUT HW Version</th>
+ </tr>
+ </thead>
+ <tbody class="directory_inner" style="overflow: hidden; text-overflow: ellipsis;">
+ <tr style="vertical-align: center;" ng-repeat="prod in ctrl.directory"
+ ng-if="prod.organization_name==ctrl.companyID && prod.approved=='true'">
+ <td width="250">{{ prod.product_name}}</td>
+ <td width="350">{{ prod.description}}</td>
+ <td width="150">{{ prod.ovp_category}}</td>
+ <td width="150">{{ prod.ovp_version}}</td>
+ <td><a href="{{ prod.product_documentation}}" target="_blank">{{ prod.product_documentation}}</a></td>
+ <td width="150">{{ prod.sut_version}}</td>
+ <td width="150">{{ prod.sut_hw_version}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/guidelines/guidelines.html b/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
index 6e138b8..5cf3cbd 100644
--- a/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
+++ b/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
@@ -2,55 +2,29 @@
<!-- Guideline Filters -->
<div class="row">
- <div class="col-md-3">
- <strong>Version:</strong>
- <!-- Slicing the version file name here gets rid of the '.json' file extension -->
- <select ng-model="ctrl.version"
- ng-change="ctrl.update()"
- class="form-control"
- ng-options="versionFile.slice(0,10) for versionFile in ctrl.versionList">
- </select>
- </div>
- <!--
- <div class="col-md-4">
- <strong>Target Program:</strong>
- <span class="program-about"><a target="_blank" href="http://www.openstack.org/brand/interop/">About</a></span>
- <select ng-model="ctrl.target" class="form-control" ng-change="ctrl.updateTargetCapabilities()">
- <option value="platform">OpenStack Powered Platform</option>
- <option value="compute">OpenStack Powered Compute</option>
- <option value="object">OpenStack Powered Object Storage</option>
- </select>
- </div>
- -->
+ <div class="col-md-3">
+ <strong>Version:</strong>
+ <!-- Slicing the version file name here gets rid of the '.json' file extension -->
+ <select ng-model="ctrl.version"
+ ng-change="ctrl.update()"
+ class="form-control"
+ ng-options="versionFile.slice(0,10) for versionFile in ctrl.versionList">
+ </select>
+ </div>
</div>
<br />
-<!--
-<div ng-if="ctrl.guidelines">
- <strong>Guideline Status:</strong>
- {{ctrl.guidelines.status | capitalize}}
-</div>
-
-<div ng-show="ctrl.guidelines">
- <strong>Corresponding OpenStack Releases:</strong>
- <ul class="list-inline">
- <li ng-repeat="release in ctrl.guidelines.releases">
- {{release | capitalize}}
- </li>
- </ul>
-</div>
--->
<strong>Capability Status:</strong>
<div class="checkbox">
- <label>
+ <label>
<input type="checkbox" ng-model="ctrl.showMandatory">
<span class="mandatory">Mandatory</span>
- </label>
- <label>
+ </label>
+ <label>
<input type="checkbox" ng-model="ctrl.showOptional">
<span class="optional">Optional</span>
- </label>
+ </label>
</div>
<!-- End Capability Filters -->
@@ -60,11 +34,3 @@
<!-- Get the version-specific template -->
<div nf-show="ctrl.data" ng-include src="ctrl.detailsTemplate"></div>
-
-<!--
-<div ng-show="ctrl.showError" class="alert alert-danger" role="alert">
- <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
- <span class="sr-only">Error:</span>
- {{ctrl.error}}
-</div>
--->
diff --git a/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html b/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html
index 05a1ef5..bf65a38 100644
--- a/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html
+++ b/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html
@@ -6,85 +6,39 @@ variable 'guidelines'.
<h3 ng-show="ctrl.showMandatory">{{ctrl.data.mandatory.name}}</h3>
<div ng-repeat="area in ctrl.data.mandatory.value" ng-show="ctrl.showMandatory">
- <h4>{{area.area_name}}</h4>
- <ol class="capabilities">
- <li class="capability-list-item" ng-repeat="api in area.value">
- <span class="capability-name">{{api.api_name}}</span><br />
- Area: <em>{{area.area_name}}</em><br />
- Status: <span>Mandatory</span><br />
+ <h4>{{area.area_name}}</h4>
+ <ol class="capabilities">
+ <li class="capability-list-item" ng-repeat="api in area.value">
+ <span class="capability-name">{{api.api_name}}</span><br />
+ Area: <em>{{area.area_name}}</em><br />
+ Status: <span>Mandatory</span><br />
- <a ng-click="showTests = !showTests">Tests ({{api.value.length}})</a>
- <ul uib-collapse="!showTests">
- <li ng-repeat="test in api.value">
- <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span>
- {{test}}
- </li>
- </ul>
- </li>
- </ol>
+ <a ng-click="showTests = !showTests">Tests ({{api.value.length}})</a>
+ <ul uib-collapse="!showTests">
+ <li ng-repeat="test in api.value">
+ <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span>
+ {{test}}
+ </li>
+ </ul>
+ </li>
+ </ol>
</div>
<h3 ng-show="ctrl.showOptional">{{ctrl.data.optional.name}}</h3>
<div ng-repeat="area in ctrl.data.optional.value" ng-show="ctrl.showOptional">
- <h4>{{area.area_name}}</h4>
- <ol class="capabilities">
- <li class="capability-list-item" ng-repeat="api in area.value">
- <span class="capability-name">{{api.api_name}}</span><br />
- Status: <span>Optional</span><br />
-
- <a ng-click="showTests = !showTests">Tests ({{api.value.length}})</a>
- <ul uib-collapse="!showTests">
- <li ng-repeat="test in api.value">
- <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span>
- {{test}}
- </li>
- </ul>
- </li>
- </ol>
-</div>
-<!--
-<ol ng-show="ctrl.data" class="capabilities">
- <li class="capability-list-item" ng-repeat="capability in ctrl.guidelines.capabilities | arrayConverter | filter:ctrl.filterStatus | orderBy:'id'">
- <span class="capability-name">{{capability.id}}</span><br />
- <em>{{capability.description}}</em><br />
- Status: <span class="{{ctrl.targetCapabilities[capability.id]}}">{{ctrl.targetCapabilities[capability.id]}}</span><br />
- <span ng-if="capability.project">Project: {{capability.project | capitalize}}<br /></span>
- <a ng-click="showAchievements = !showAchievements">Achievements ({{capability.achievements.length}})</a><br />
- <ol uib-collapse="!showAchievements" class="list-inline">
- <li ng-repeat="achievement in capability.achievements">
- {{achievement}}
- </li>
- </ol>
+ <h4>{{area.area_name}}</h4>
+ <ol class="capabilities">
+ <li class="capability-list-item" ng-repeat="api in area.value">
+ <span class="capability-name">{{api.api_name}}</span><br />
+ Status: <span>Optional</span><br />
- <a ng-click="showTests = !showTests">Tests ({{ctrl.getObjectLength(capability.tests)}})</a>
- <ul uib-collapse="!showTests">
- <li ng-if="ctrl.guidelines.schema === '1.2'" ng-repeat="test in capability.tests">
- <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span>
- {{test}}
- </li>
- <li ng-if="ctrl.guidelines.schema > '1.2'" ng-repeat="(testName, testDetails) in capability.tests">
- <span ng-class="{'glyphicon glyphicon-flag text-warning': testDetails.flagged}" title="{{testDetails.flagged.reason}}"></span>
- {{testName}}
- <div class="test-detail" ng-if="testDetails.aliases">
- <strong>Aliases:</strong>
- <ul><li ng-repeat="alias in testDetails.aliases">{{alias}}</li></ul>
- </div>
+ <a ng-click="showTests = !showTests">Tests ({{api.value.length}})</a>
+ <ul uib-collapse="!showTests">
+ <li ng-repeat="test in api.value">
+ <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span>
+ {{test}}
</li>
- </ul>
- </li>
-</ol>
-
-<div ng-show="ctrl.guidelines" class="criteria">
- <hr>
- <h4><a ng-click="showCriteria = !showCriteria">Criteria</a></h4>
- <div uib-collapse="showCriteria">
- <ul>
- <li ng-repeat="(key, criterion) in ctrl.guidelines.criteria">
- <span class="criterion-name">{{criterion.name}}</span><br />
- <em>{{criterion.Description}}</em><br />
- Weight: {{criterion.weight}}
- </li>
- </ul>
- </div>
+ </ul>
+ </li>
+ </ol>
</div>
--->
diff --git a/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html b/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html
index 5b1d698..8e4a37d 100644
--- a/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html
+++ b/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html
@@ -1,46 +1,47 @@
<div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" aria-hidden="true" ng-click="modal.close()">&times;</button>
- <h4>Test List ({{modal.testListCount}})</h4>
- <p>Use this test list with <a title="testapi-client" target="_blank"href="https://github.com/openstack/testapi-client">testapi-client</a>
- to run only tests in the {{modal.version}} OpenStack Powered&#8482; guideline from capabilities with the following statuses:
- </p>
- <ul class="list-inline">
- <li class="required" ng-if="modal.status.required"> Required</li>
- <li class="advisory" ng-if="modal.status.advisory"> Advisory</li>
- <li class="deprecated" ng-if="modal.status.deprecated"> Deprecated</li>
- <li class="removed" ng-if="modal.status.removed"> Removed</li>
- </ul>
- <div class="checkbox checkbox-test-list">
- <label><input type="checkbox" ng-model="modal.aliases" ng-change="modal.updateTestListString()">Aliases</label>
- <span class="glyphicon glyphicon-info-sign info-hover" aria-hidden="true"
- title="Include test aliases as tests may have been renamed over time. It does not hurt to include these."></span>
- &nbsp;
- <label><input type="checkbox" ng-model="modal.flagged" ng-change="modal.updateTestListString()">Flagged</label>
- <span class="glyphicon glyphicon-info-sign info-hover" aria-hidden="true"
- title="Include flagged tests.">
- </span>
- </div>
- <p ng-hide="modal.error"> Alternatively, get the test list directly from the API on your CLI:</p>
- <code ng-hide="modal.error">wget "{{modal.testListUrl}}" -O {{modal.version}}-test-list.txt</code>
+ <div class="modal-header">
+ <button type="button" class="close" aria-hidden="true" ng-click="modal.close()">&times;</button>
+ <h4>Test List ({{modal.testListCount}})</h4>
+ <p>Use this test list with
+ <a title="testapi-client" target="_blank"href="https://github.com/openstack/testapi-client">testapi-client</a>
+ to run only tests in the {{modal.version}} OpenStack Powered&#8482; guideline from capabilities with the
+ following statuses:
+ </p>
+ <ul class="list-inline">
+ <li class="required" ng-if="modal.status.required"> Required</li>
+ <li class="advisory" ng-if="modal.status.advisory"> Advisory</li>
+ <li class="deprecated" ng-if="modal.status.deprecated"> Deprecated</li>
+ <li class="removed" ng-if="modal.status.removed"> Removed</li>
+ </ul>
+ <div class="checkbox checkbox-test-list">
+ <label><input type="checkbox" ng-model="modal.aliases" ng-change="modal.updateTestListString()">Aliases</label>
+ <span class="glyphicon glyphicon-info-sign info-hover" aria-hidden="true"
+ title="Include test aliases as tests may have been renamed over time. It does not hurt to include these.">
+ </span>
+ &nbsp;
+ <label><input type="checkbox" ng-model="modal.flagged" ng-change="modal.updateTestListString()">Flagged</label>
+ <span class="glyphicon glyphicon-info-sign info-hover" aria-hidden="true"
+ title="Include flagged tests.">
+ </span>
</div>
- <div class="modal-body tests-modal-content">
- <div cg-busy="{promise:modal.testListRequest,message:'Loading'}"></div>
- <div ng-show="modal.error" class="alert alert-danger" role="alert">
- <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
- <span class="sr-only">Error:</span>
- {{modal.error}}
- </div>
- <div class="form-group">
- <textarea class="form-control" rows="16" id="tests" wrap="off">{{modal.testListString}}</textarea>
- </div>
+ <p ng-hide="modal.error"> Alternatively, get the test list directly from the API on your CLI:</p>
+ <code ng-hide="modal.error">wget "{{modal.testListUrl}}" -O {{modal.version}}-test-list.txt</code>
+ </div>
+ <div class="modal-body tests-modal-content">
+ <div cg-busy="{promise:modal.testListRequest,message:'Loading'}"></div>
+ <div ng-show="modal.error" class="alert alert-danger" role="alert">
+ <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
+ <span class="sr-only">Error:</span>
+ {{modal.error}}
</div>
- <div class="modal-footer">
- <a target="_blank" href="{{modal.testListUrl}}" download="{{modal.version + '-test-list.txt'}}">
- <button class="btn btn-primary" ng-if="modal.testListCount > 0" type="button">
- Download
- </button>
- </a>
- <button class="btn btn-primary" type="button" ng-click="modal.close()">Close</button>
+ <div class="form-group">
+ <textarea class="form-control" rows="16" id="tests" wrap="off">{{modal.testListString}}</textarea>
</div>
+ </div>
+ <div class="modal-footer">
+ <a target="_blank" href="{{modal.testListUrl}}" download="{{modal.version + '-test-list.txt'}}">
+ <button class="btn btn-primary" ng-if="modal.testListCount > 0" type="button">Download</button>
+ </a>
+ <button class="btn btn-primary" type="button" ng-click="modal.close()">Close</button>
+ </div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/home/home.html b/3rd_party/static/testapi-ui/components/home/home.html
index d0c4e63..fd5ca36 100644
--- a/3rd_party/static/testapi-ui/components/home/home.html
+++ b/3rd_party/static/testapi-ui/components/home/home.html
@@ -1,204 +1,215 @@
<div class="container-fluid">
- <div class="row">
- <div class="col-md-2 home-category" ng-style="{'height': ctrl.height}">
- <div class="panel-group" id="accordion">
- <div class="panel panel-default">
- <div class="panel-heading">
- <div class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
- Governance & Workflow
- </a>
- </div>
- </div>
- <div id="collapseOne" class="panel-collapse collapse">
- <div class="panel-body">
- <div>
- <a href="https://www.opnfv.org/verified"
- target="_blank">Overview&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="https://www.opnfv.org/wp-content/uploads/sites/12/2018/09/LFN_CVP_Guidelines-1.0.0.pdf"
- target="_blank">Governance Guidelines&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="https://www.opnfv.org/wp-content/uploads/sites/12/2018/09/OVP-Terms-and-Conditions-092418.pdf"
- target="_blank">Terms & Conditions&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/certificationworkflow/index.html"
- target="_blank">Process Workflow&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="https://na3.docusign.net/Member/PowerFormSigning.aspx?PowerFormId=dc24bf38-ea41-40d4-9e58-9babc6eec778"
- target="_blank">Participation Form&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div><a href="https://www.opnfv.org/wp-content/uploads/sites/12/2018/05/OPNFV_Verified_BrandGuide_021618.pdf"
- target="_blank">OPNFV Verified Brand Guidelines&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <!--
- <div><a target="_blank">Approved 3rd Party Labs&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a></div>
- -->
- </div> </div>
- </div>
- <div class="panel panel-default" style="margin-top:0px">
- <div class="panel-heading">
- <div class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
- Release 2018.09
- </a>
- </div>
- </div>
- <div id="collapseTwo" class="panel-collapse collapse">
- <div class="panel-body">
- <div>
- <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/userguide/testing_guide.html"
- target="_blank">OVP / Dovetail User Guide&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/userguide/cli_reference.html"
- target="_blank">Dovetail CLI&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/testspecification"
- target="_blank">Test Specifications&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/release/release-notes/index.html"
- target="_blank">Release Notes&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/reviewerguide/index.html"
- target="_blank">Reviewer Guide&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/ovpaddendum/index.html"
- target="_blank">Guidelines Addendum&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <!--
- <div><a target="_blank">FAQ</a></div>
- <div><a target="_blank">Known issues</a></div>
- <div><a target="_blank">Dovetail and dependent container versioning</a></div>
- <div><a target="_blank">Other - TBD</a></div>
- -->
- </div>
- </div>
- </div>
- <div class="panel panel-default" style="margin-top:0px">
- <div class="panel-heading">
- <div class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
- Release 2018.01
- </a>
- </div>
- </div>
- <div id="collapseThree" class="panel-collapse collapse">
- <div class="panel-body">
- <div>
- <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/userguide/testing_guide.html"
- target="_blank">OVP / Dovetail User Guide&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/userguide/cli_reference.html"
- target="_blank">Dovetail CLI&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/testspecification"
- target="_blank">Test Specifications&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/release/release-notes/index.html"
- target="_blank">Release Notes&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/reviewerguide/index.html"
- target="_blank">Reviewer Guide&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <div>
- <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/ovpaddendum/index.html"
- target="_blank">Guidelines Addendum&nbsp<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span></a>
- </div>
- <!--
- <div><a target="_blank">FAQ</a></div>
- <div><a target="_blank">Known issues</a></div>
- <div><a target="_blank">Dovetail and dependent container versioning</a></div>
- <div><a target="_blank">Other - TBD</a></div>
- -->
- </div>
- </div>
- </div>
- <!--
- <div class="panel panel-default" style="margin-top:0px">
- <div class="panel-heading">
- <div class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseFour">
- OVP Registry
- </a>
- </div>
- </div>
- <div id="collapseFour" class="panel-collapse collapse">
- <div class="panel-body">
- </div>
- </div>
- </div>
- -->
+ <div class="row">
+ <div class="col-md-2 home-category" ng-style="{'height': ctrl.height}">
+ <div class="panel-group" id="accordion">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="panel-title">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
+ Governance &amp; Workflow
+ </a>
</div>
- </div>
-
- <div class="col-md-10">
- <div class="common-main-container">
- <div class="home-content-title">
- <h2>OPNFV Verified Program verifies products and services with the "OPNFV Verified" mark.</h2>
+ </div>
+ <div id="collapseOne" class="panel-collapse collapse">
+ <div class="panel-body">
+ <div>
+ <a href="https://www.opnfv.org/verified"
+ target="_blank">Overview&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
</div>
- <div class="home-content">
- <div class="col-md-2">
- <img class="home-content-img" src="testapi-ui/assets/img/icon.png" />
- </div>
- <div class="col-md-10">
- <p class="home-content-text" style="padding-bottom:40px;">
- The OPNFV Verified Program (OVP) demonstrates the readiness and availability of commercial
- NFV products and services by implementing explicitly defined interfaces, behaviors and key
- features. This open source community-led initiative allows vendors and service providers to
- establish baseline conformance and interoperability while retaining distinct and value-added
- innovations across features and capabilities. Now in its second iteration, the program has
- doubled the number of mandatory tests from 215 to 432; and requires verified products to
- complete additional functional, high-availability, and NFV-focused tests. Future plans for
- OVP include adding third-party labs, as well as testing and verification of VNF deployments.
- View the directory of verified products and services below and navigate through the links
- in the left-hand menu to learn more and get started. You will find step-by-step instructions
- as well as a participation form. Use this portal to upload your test results when ready.
- Please send any questions to <a href="mailto:verified@opnfv.org">verified@opnfv.org</a><sup>
- <span class="glyphicon glyphicon-envelope" style="font-size:60%;" aria-hidden="true"></span></sup>.
- </p>
- </div>
+ <div>
+ <a href="https://www.opnfv.org/wp-content/uploads/sites/12/2018/09/LFN_CVP_Guidelines-1.0.0.pdf"
+ target="_blank">Governance Guidelines&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
</div>
- <div id="directory_break">
+ <div>
+ <a href="https://www.opnfv.org/wp-content/uploads/sites/12/2018/09/OVP-Terms-and-Conditions-092418.pdf"
+ target="_blank">Terms &amp; Conditions&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
</div>
- <div class="home-content-title">
- <h1>OPNFV Verified Products Directory</h1>
- Click on rows for more product verification details per company.
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/certificationworkflow/index.html"
+ target="_blank">Process Workflow&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
</div>
- <div class="directory_main">
- <table id="directory_inner" class="">
- <thead>
- <tr>
- <th>Company</th>
- <th>Product</th>
- <th>Category</th>
- <th>Version</th>
- </tr>
- </thead>
- <tbody style="overflow: hidden; text-overflow: ellipsis;">
- <tr class="company_row" ng-click="ctrl.getCompany(app)" ng-repeat="app in ctrl.applications | filter:{approved:true} | orderBy : '-approve_date'">
- <td width="400"><img class="company_logo" ng-src="api/v1/cvp/applications/getlogo/{{app.company_logo}}" />{{ app.organization_name}}</td>
- <td width="300">{{ app.product_name}}</td>
- <td width="150">{{ app.ovp_category}}</td>
- <td width="150">{{ app.ovp_version}}</td>
- </tr>
- </tbody>
- </table>
+ <div>
+ <a href="https://na3.docusign.net/Member/PowerFormSigning.aspx?PowerFormId=dc24bf38-ea41-40d4-9e58-9babc6eec778"
+ target="_blank">Participation Form&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
</div>
-
+ <div>
+ <a href="https://www.opnfv.org/wp-content/uploads/sites/12/2018/05/OPNFV_Verified_BrandGuide_021618.pdf"
+ target="_blank">OPNFV Verified Brand Guidelines&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="panel panel-default" style="margin-top: 0px;">
+ <div class="panel-heading">
+ <div class="panel-title">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
+ Release 2018.09
+ </a>
+ </div>
+ </div>
+ <div id="collapseTwo" class="panel-collapse collapse">
+ <div class="panel-body">
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/userguide/testing_guide.html"
+ target="_blank">OVP / Dovetail User Guide&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/userguide/cli_reference.html"
+ target="_blank">Dovetail CLI&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/testspecification"
+ target="_blank">Test Specifications&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/release/release-notes/index.html"
+ target="_blank">Release Notes&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/reviewerguide/index.html"
+ target="_blank">Reviewer Guide&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-fraser/submodules/dovetail/docs/testing/user/ovpaddendum/index.html"
+ target="_blank">Guidelines Addendum&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
</div>
+ </div>
+ </div>
+ <div class="panel panel-default" style="margin-top: 0px;">
+ <div class="panel-heading">
+ <div class="panel-title">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
+ Release 2018.01
+ </a>
+ </div>
+ </div>
+ <div id="collapseThree" class="panel-collapse collapse">
+ <div class="panel-body">
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/userguide/testing_guide.html"
+ target="_blank">OVP / Dovetail User Guide&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/userguide/cli_reference.html"
+ target="_blank">Dovetail CLI&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/testspecification"
+ target="_blank">Test Specifications&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/release/release-notes/index.html"
+ target="_blank">Release Notes&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/reviewerguide/index.html"
+ target="_blank">Reviewer Guide&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ <div>
+ <a href="http://docs.opnfv.org/en/stable-danube/submodules/dovetail/docs/testing/user/ovpaddendum/index.html"
+ target="_blank">Guidelines Addendum&nbsp;>
+ <span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-md-10">
+ <div class="common-main-container">
+ <div class="home-content-title">
+ <h2>OPNFV Verified Program verifies products and services with the "OPNFV Verified" mark.</h2>
+ </div>
+ <div class="home-content">
+ <div class="col-md-2">
+ <img class="home-content-img" src="testapi-ui/assets/img/icon.png" />
+ </div>
+ <div class="col-md-10">
+ <p class="home-content-text" style="padding-bottom: 40px;">
+ The OPNFV Verified Program (OVP) demonstrates the readiness and availability of commercial
+ NFV products and services by implementing explicitly defined interfaces, behaviors and key
+ features. This open source community-led initiative allows vendors and service providers to
+ establish baseline conformance and interoperability while retaining distinct and value-added
+ innovations across features and capabilities. Now in its second iteration, the program has
+ doubled the number of mandatory tests from 215 to 432; and requires verified products to
+ complete additional functional, high-availability, and NFV-focused tests. Future plans for
+ OVP include adding third-party labs, as well as testing and verification of VNF deployments.
+ View the directory of verified products and services below and navigate through the links
+ in the left-hand menu to learn more and get started. You will find step-by-step instructions
+ as well as a participation form. Use this portal to upload your test results when ready.
+ Please send any questions to <a href="mailto:verified@opnfv.org">verified@opnfv.org</a><sup>
+ <span class="glyphicon glyphicon-envelope" style="font-size: 60%;" aria-hidden="true"></span></sup>.
+ </p>
+ </div>
+ </div>
+ <div id="directory_break">
+ </div>
+ <div class="home-content-title">
+ <h1>OPNFV Verified Products Directory</h1>
+ Click on rows for more product verification details per company.
+ </div>
+ <div class="directory_main">
+ <table id="directory_inner" class="">
+ <thead>
+ <tr>
+ <th>Company</th>
+ <th>Product</th>
+ <th>Category</th>
+ <th>Version</th>
+ </tr>
+ </thead>
+ <tbody style="overflow: hidden; text-overflow: ellipsis;">
+ <tr class="company_row" ng-click="ctrl.getCompany(app)"
+ ng-repeat="app in ctrl.applications | filter:{approved:true} | orderBy : '-approve_date'">
+ <td width="400">
+ <img class="company_logo" ng-src="api/v1/cvp/applications/getlogo/{{app.company_logo}}" />
+ {{ app.organization_name}}
+ </td>
+ <td width="300">{{ app.product_name}}</td>
+ <td width="150">{{ app.ovp_category}}</td>
+ <td width="150">{{ app.ovp_version}}</td>
+ </tr>
+ </tbody>
+ </table>
</div>
+ </div>
</div>
+ </div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/profile/importPubKeyModal.html b/3rd_party/static/testapi-ui/components/profile/importPubKeyModal.html
index 0f55c27..9252b55 100644
--- a/3rd_party/static/testapi-ui/components/profile/importPubKeyModal.html
+++ b/3rd_party/static/testapi-ui/components/profile/importPubKeyModal.html
@@ -1,27 +1,27 @@
<div class="modal-header">
- <h4>Import Public Key</h4>
- <p>Instructions for adding a public key and signature can be found
- <a href="https://github.com/openstack/refstack/blob/master/doc/source/uploading_private_results.rst#generate-ssh-keys-locally"
- target="_blank"
- title="How to generate and upload SSH key and signature with testapi-client">here.
- </a>
- </p>
+ <h4>Import Public Key</h4>
+ <p>Instructions for adding a public key and signature can be found
+ <a href="https://github.com/openstack/refstack/blob/master/doc/source/uploading_private_results.rst#generate-ssh-keys-locally"
+ target="_blank"
+ title="How to generate and upload SSH key and signature with testapi-client">here.
+ </a>
+ </p>
</div>
<div class="modal-body container-fluid">
<div class="row">
- <div class="col-md-2">Public Key</div>
- <div class="col-md-9 pull-right">
+ <div class="col-md-2">Public Key</div>
+ <div class="col-md-9 pull-right">
<textarea type="text" rows="10" cols="42" ng-model="modal.raw_key" required></textarea>
- </div>
+ </div>
</div>
<div class="row">
- <div class="col-md-2">Signature</div>
- <div class="col-md-9 pull-right">
+ <div class="col-md-2">Signature</div>
+ <div class="col-md-9 pull-right">
<textarea type="text" rows="10" cols="42" ng-model="modal.self_signature" required></textarea>
- </div>
+ </div>
</div>
<div class="modal-footer">
- <button class="btn btn-warning btn-sm" ng-click="modal.cancel()">Cancel</button>
- <button type="button" class="btn btn-default btn-sm" ng-click="modal.importPubKey()">Import Public Key</button>
+ <button class="btn btn-warning btn-sm" ng-click="modal.cancel()">Cancel</button>
+ <button type="button" class="btn btn-default btn-sm" ng-click="modal.importPubKey()">Import Public Key</button>
</div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/profile/profile.html b/3rd_party/static/testapi-ui/components/profile/profile.html
index 98b28df..563adbf 100644
--- a/3rd_party/static/testapi-ui/components/profile/profile.html
+++ b/3rd_party/static/testapi-ui/components/profile/profile.html
@@ -1,40 +1,52 @@
<div class="container-fluid common-main-container">
-<h3>User profile</h3>
-<div cg-busy="{promise:ctrl.authRequest,message:'Loading'}"></div>
-<div>
+ <h3>User profile</h3>
+ <div cg-busy="{promise:ctrl.authRequest,message:'Loading'}"></div>
+ <div>
<table class="table table-striped table-hover">
- <tbody>
- <tr> <td>User name</td> <td>{{auth.currentUser.fullname}}</td> </tr>
- <tr> <td>User OpenId</td> <td>{{auth.currentUser.openid}}</td> </tr>
- <tr> <td>Email</td> <td>{{auth.currentUser.email}}</td> </tr>
- <tr> <td>Role</td> <td> {{auth.currentUser.role}}</td> </tr>
- </tbody>
+ <tbody>
+ <tr>
+ <td>User name</td>
+ <td>{{auth.currentUser.fullname}}</td>
+ </tr>
+ <tr>
+ <td>User OpenId</td>
+ <td>{{auth.currentUser.openid}}</td>
+ </tr>
+ <tr>
+ <td>Email</td>
+ <td>{{auth.currentUser.email}}</td>
+ </tr>
+ <tr>
+ <td>Role</td>
+ <td>{{auth.currentUser.role}}</td>
+ </tr>
+ </tbody>
</table>
-</div>
-<div ng-show="ctrl.pubkeys">
+ </div>
+ <div ng-show="ctrl.pubkeys">
<div class="container-fluid">
- <div class="row">
- <div class="col-md-4">
- <h4>User Public Keys</h4>
- </div>
- <div class="col-md-2 pull-right">
- <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.openImportPubKeyModal()">
- <span class="glyphicon glyphicon-plus"></span> Import Public Key
- </button>
- </div>
+ <div class="row">
+ <div class="col-md-4">
+ <h4>User Public Keys</h4>
+ </div>
+ <div class="col-md-2 pull-right">
+ <button type="button" class="btn btn-default btn-sm" ng-click="ctrl.openImportPubKeyModal()">
+ <span class="glyphicon glyphicon-plus"></span> Import Public Key
+ </button>
</div>
+ </div>
</div>
<div>
- <table class="table table-striped table-hover">
- <tbody>
- <tr ng-repeat="pubKey in ctrl.pubkeys" ng-click="ctrl.openShowPubKeyModal(pubKey)">
- <td>{{pubKey.format}}</td>
- <td>{{pubKey.shortKey}}</td>
- <td>{{pubKey.comment}}</td>
- </tr>
- </tbody>
- </table>
+ <table class="table table-striped table-hover">
+ <tbody>
+ <tr ng-repeat="pubKey in ctrl.pubkeys" ng-click="ctrl.openShowPubKeyModal(pubKey)">
+ <td>{{pubKey.format}}</td>
+ <td>{{pubKey.shortKey}}</td>
+ <td>{{pubKey.comment}}</td>
+ </tr>
+ </tbody>
+ </table>
</div>
-</div>
+ </div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/profile/showPubKeyModal.html b/3rd_party/static/testapi-ui/components/profile/showPubKeyModal.html
index 5f63a5e..d397091 100644
--- a/3rd_party/static/testapi-ui/components/profile/showPubKeyModal.html
+++ b/3rd_party/static/testapi-ui/components/profile/showPubKeyModal.html
@@ -1,11 +1,11 @@
<div class="modal-header">
- <h4>Public Key</h4>
+ <h4>Public Key</h4>
</div>
<div class="modal-body container-fluid">
- <textarea type="text" rows="10" cols="67" readonly="readonly">{{modal.rawKey}}</textarea>
- <div class="modal-footer">
- <button class="btn btn-warning" ng-click="modal.cancel()">Cancel</button>
- <button type="button" class="btn btn-danger btn-sm" ng-click="modal.deletePubKey() "
- confirm="Are you sure you want to delete this public key? You will lose management access to any test results signed with this key.">Delete</button>
- </div>
+ <textarea type="text" rows="10" cols="67" readonly="readonly">{{modal.rawKey}}</textarea>
+ <div class="modal-footer">
+ <button class="btn btn-warning" ng-click="modal.cancel()">Cancel</button>
+ <button type="button" class="btn btn-danger btn-sm" ng-click="modal.deletePubKey() "
+ confirm="Are you sure you want to delete this public key? You will lose management access to any test results signed with this key.">Delete</button>
+ </div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/results-report/partials/editTestModal.html b/3rd_party/static/testapi-ui/components/results-report/partials/editTestModal.html
index 583c9b9..9a147f4 100644
--- a/3rd_party/static/testapi-ui/components/results-report/partials/editTestModal.html
+++ b/3rd_party/static/testapi-ui/components/results-report/partials/editTestModal.html
@@ -1,65 +1,63 @@
<div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" aria-hidden="true" ng-click="modal.close()">&times;</button>
- <h4>Edit Test Run Metadata</h4>
- <p>Make changes to your test metadata.</p>
- </div>
- <div class="modal-body">
- <div class="form-group">
- <strong>Publicly Shared:</strong>
- <select ng-model="modal.metaCopy.shared"
- class="form-control">
- <option value="true">Yes</option>
- <option value="">No</option>
- </select>
- <br />
- <strong>Associated Guideline:</strong>
- <select ng-model="modal.metaCopy.guideline"
- ng-options="o as o.slice(0, -5) for o in modal.versionList"
- class="form-control">
- <option value="">None</option>
- </select>
- <br />
- <strong>Associated Target Program:</strong>
- <select ng-model="modal.metaCopy.target"
- class="form-control">
- <option value="">None</option>
- <option value="platform">OpenStack Powered Platform</option>
- <option value="compute">OpenStack Powered Compute</option>
- <option value="object">OpenStack Powered Object Storage</option>
- </select>
- <hr>
- <strong>Associated Product:</strong>
- <select ng-options="product as product.name for product in modal.products | arrayConverter | orderBy: 'name' track by product.id"
- ng-model="modal.selectedProduct"
- ng-change="modal.getProductVersions()"
- class="form-control">
- <option value="">-- No Product --</option>
- </select>
-
- <span ng-if="modal.productVersions.length">
- <strong>Product Version:</strong>
- <select ng-options="version as version.version for version in modal.productVersions | orderBy: 'version' track by version.id"
- ng-model="modal.selectedVersion"
- class="form-control">
- </select>
+ <div class="modal-header">
+ <button type="button" class="close" aria-hidden="true" ng-click="modal.close()">&times;</button>
+ <h4>Edit Test Run Metadata</h4>
+ <p>Make changes to your test metadata.</p>
+ </div>
+ <div class="modal-body">
+ <div class="form-group">
+ <strong>Publicly Shared:</strong>
+ <select ng-model="modal.metaCopy.shared"
+ class="form-control">
+ <option value="true">Yes</option>
+ <option value="">No</option>
+ </select>
+ <br />
+ <strong>Associated Guideline:</strong>
+ <select ng-model="modal.metaCopy.guideline"
+ ng-options="o as o.slice(0, -5) for o in modal.versionList"
+ class="form-control">
+ <option value="">None</option>
+ </select>
+ <br />
+ <strong>Associated Target Program:</strong>
+ <select ng-model="modal.metaCopy.target"
+ class="form-control">
+ <option value="">None</option>
+ <option value="platform">OpenStack Powered Platform</option>
+ <option value="compute">OpenStack Powered Compute</option>
+ <option value="object">OpenStack Powered Object Storage</option>
+ </select>
+ <hr />
+ <strong>Associated Product:</strong>
+ <select ng-options="product as product.name for product in modal.products | arrayConverter | orderBy: 'name' track by product.id"
+ ng-model="modal.selectedProduct"
+ ng-change="modal.getProductVersions()"
+ class="form-control">
+ <option value="">-- No Product --</option>
+ </select>
- </span>
-
- </div>
- <div ng-show="modal.showError" class="alert alert-danger" role="alert">
- <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
- <span class="sr-only">Error:</span>
- {{modal.error}}
- </div>
- <div ng-show="modal.showSuccess" class="alert alert-success" role="success">
- <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
- <span class="sr-only">Success:</span>
- Changes saved successfully.
- </div>
+ <span ng-if="modal.productVersions.length">
+ <strong>Product Version:</strong>
+ <select ng-options="version as version.version for version in modal.productVersions | orderBy: 'version' track by version.id"
+ ng-model="modal.selectedVersion"
+ class="form-control">
+ </select>
+ </span>
+ </div>
+ <div ng-show="modal.showError" class="alert alert-danger" role="alert">
+ <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
+ <span class="sr-only">Error:</span>
+ {{modal.error}}
</div>
- <div class="modal-footer">
- <button class="btn btn-primary" type="button" ng-click="modal.saveChanges()">Save Changes</button>
- <button class="btn btn-primary" type="button" ng-click="modal.close()">Close</button>
+ <div ng-show="modal.showSuccess" class="alert alert-success" role="success">
+ <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
+ <span class="sr-only">Success:</span>
+ Changes saved successfully.
</div>
+ </div>
+ <div class="modal-footer">
+ <button class="btn btn-primary" type="button" ng-click="modal.saveChanges()">Save Changes</button>
+ <button class="btn btn-primary" type="button" ng-click="modal.close()">Close</button>
+ </div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/results-report/partials/fullTestListModal.html b/3rd_party/static/testapi-ui/components/results-report/partials/fullTestListModal.html
index 6db198b..e2d2909 100644
--- a/3rd_party/static/testapi-ui/components/results-report/partials/fullTestListModal.html
+++ b/3rd_party/static/testapi-ui/components/results-report/partials/fullTestListModal.html
@@ -1,13 +1,13 @@
<div class="modal-content">
- <div class="modal-header">
- <h4>All Passed Tests ({{modal.tests.length}})</h4>
- </div>
- <div class="modal-body tests-modal-content">
- <div class="form-group">
- <textarea class="form-control" rows="20" id="tests" wrap="off">{{modal.getTestListString()}}</textarea>
- </div>
- </div>
- <div class="modal-footer">
- <button class="btn btn-primary" type="button" ng-click="modal.close()">Close</button>
+ <div class="modal-header">
+ <h4>All Passed Tests ({{modal.tests.length}})</h4>
+ </div>
+ <div class="modal-body tests-modal-content">
+ <div class="form-group">
+ <textarea class="form-control" rows="20" id="tests" wrap="off">{{modal.getTestListString()}}</textarea>
</div>
+ </div>
+ <div class="modal-footer">
+ <button class="btn btn-primary" type="button" ng-click="modal.close()">Close</button>
+ </div>
</div>
diff --git a/3rd_party/static/testapi-ui/components/results-report/partials/reportDetails.html b/3rd_party/static/testapi-ui/components/results-report/partials/reportDetails.html
index 78ec4b1..d58f1be 100644
--- a/3rd_party/static/testapi-ui/components/results-report/partials/reportDetails.html
+++ b/3rd_party/static/testapi-ui/components/results-report/partials/reportDetails.html
@@ -5,48 +5,52 @@ report page.
Test Filters:<br />
<div class="btn-toolbar" role="toolbar">
- <div class="btn-group button-margin" data-toggle="buttons">
- <label class="btn btn-default" ng-click="ctrl.changeStatus('total')" ng-class="{'active': ctrl.testStatus === 'total'}">
- <input type="radio" ng-model="ctrl.testStatus" value="total">
- <span class="text-primary">All</span>
- </label>
- <label class="btn btn-default" ng-click="ctrl.changeStatus('passed')" ng-class="{'active': ctrl.testStatus === 'passed'}">
- <input type="radio" ng-model="ctrl.testStatus" value="passed">
- <span class="text-success">Passed</span>
- </label>
- <label class="btn btn-default" ng-click="ctrl.changeStatus('not passed')" ng-class="{'active': ctrl.testStatus === 'not passed'}">
- <input type="radio" ng-model="ctrl.testStatus" value="not passed">
- <span class="text-danger">Not Passed</span>
- </label>
- </div>
- <div class="btn-group button-margin" style="float:right">
- <button type="button" class="btn btn-default" ng-click="ctrl.openAll()">Expand</button>
- <button type="button" class="btn btn-default" ng-click="ctrl.folderAll()">Collapse</button>
- </div>
+ <div class="btn-group button-margin" data-toggle="buttons">
+ <label class="btn btn-default" ng-click="ctrl.changeStatus('total')"
+ ng-class="{'active': ctrl.testStatus === 'total'}">
+ <input type="radio" ng-model="ctrl.testStatus" value="total">
+ <span class="text-primary">All</span>
+ </label>
+ <label class="btn btn-default" ng-click="ctrl.changeStatus('passed')"
+ ng-class="{'active': ctrl.testStatus === 'passed'}">
+ <input type="radio" ng-model="ctrl.testStatus" value="passed">
+ <span class="text-success">Passed</span>
+ </label>
+ <label class="btn btn-default" ng-click="ctrl.changeStatus('not passed')"
+ ng-class="{'active': ctrl.testStatus === 'not passed'}">
+ <input type="radio" ng-model="ctrl.testStatus" value="not passed">
+ <span class="text-danger">Not Passed</span>
+ </label>
+ </div>
+ <div class="btn-group button-margin" style="float: right;">
+ <button type="button" class="btn btn-default" ng-click="ctrl.openAll()">Expand</button>
+ <button type="button" class="btn btn-default" ng-click="ctrl.folderAll()">Collapse</button>
+ </div>
</div>
<uib-accordion-group ng-repeat="(type,data) in ctrl.data" is-open="isOpen">
-<uib-accordion-heading>
- {{ type }}: {{ ctrl.statistics[type].total }} tests
- <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': isOpen, 'glyphicon-chevron-right': !isOpen}"></i>
- </uib-accordion-heading>
- <ol class="capabilities">
- <li ng-repeat="(area, value) in data" ng-show="(ctrl.testStatus == 'passed' && value.pass != 0) || (ctrl.testStatus == 'not passed' && value.fail != 0) || ctrl.testStatus == 'total'">
-
- <a ng-click="value.folder = !value.folder">
- {{ area }}
- <span ng-if="ctrl.testStatus == 'total'" ng-class="{'text-success': value.total == value.pass, 'text-warning': (value.pass < value.total && value.pass > 0), 'text-danger': value.pass == 0}">[{{ value.pass }}/{{ value.total }}]</span>
- <span ng-if="ctrl.testStatus == 'passed'" class="text-success">[{{ value.pass }}]</span>
- <span ng-if="ctrl.testStatus == 'not passed'" class="text-danger">[{{ value.fail }}]</span>
- </a>
- <a uib-tooltip="view log" ng-click="ctrl.gotoResultLog(area)"><span class="glyphicon glyphicon-cog"></span></a>
- <ul class="list-unstyled" uib-collapse="value.folder">
- <li ng-repeat="case in value.cases" ng-if="(ctrl.testStatus=='passed' && ctrl.case_list.indexOf(case) > -1) || (ctrl.testStatus=='not passed' && ctrl.case_list.indexOf(case) == -1) || ctrl.testStatus=='total'">
- <span ng-class="{'glyphicon glyphicon-ok text-success':ctrl.case_list.indexOf(case) > -1, 'glyphicon glyphicon-remove text-warning':ctrl.case_list.indexOf(case) == -1}" aria-hidden="true"></span>
- <a ng-click="ctrl.gotoDoc(case)">{{ case }}</a>
- </li>
-
- </ul>
+ <uib-accordion-heading>
+ {{ type }}: {{ ctrl.statistics[type].total }} tests
+ <i class="pull-right glyphicon"
+ ng-class="{'glyphicon-chevron-down': isOpen, 'glyphicon-chevron-right': !isOpen}"></i>
+ </uib-accordion-heading>
+ <ol class="capabilities">
+ <li ng-repeat="(area, value) in data" ng-show="(ctrl.testStatus == 'passed' && value.pass != 0) || (ctrl.testStatus == 'not passed' && value.fail != 0) || ctrl.testStatus == 'total'">
+ <a ng-click="value.folder = !value.folder">
+ {{ area }}
+ <span ng-if="ctrl.testStatus == 'total'" ng-class="{'text-success': value.total == value.pass, 'text-warning': (value.pass < value.total && value.pass > 0), 'text-danger': value.pass == 0}">[{{ value.pass }}/{{ value.total }}]</span>
+ <span ng-if="ctrl.testStatus == 'passed'" class="text-success">[{{ value.pass }}]</span>
+ <span ng-if="ctrl.testStatus == 'not passed'" class="text-danger">[{{ value.fail }}]</span>
+ </a>
+ <a uib-tooltip="view log" ng-click="ctrl.gotoResultLog(area)"><span class="glyphicon glyphicon-cog"></span></a>
+ <ul class="list-unstyled" uib-collapse="value.folder">
+ <li ng-repeat="case in value.cases"
+ ng-if="(ctrl.testStatus=='passed' && ctrl.case_list.indexOf(case) > -1) || (ctrl.testStatus=='not passed' && ctrl.case_list.indexOf(case) == -1) || ctrl.testStatus=='total'">
+ <span ng-class="{'glyphicon glyphicon-ok text-success':ctrl.case_list.indexOf(case) > -1, 'glyphicon glyphicon-remove text-warning':ctrl.case_list.indexOf(case) == -1}"
+ aria-hidden="true"></span>
+ <a ng-click="ctrl.gotoDoc(case)">{{ case }}</a>
</li>
- </ol>
+ </ul>
+ </li>
+ </ol>
</uib-accordion-group>
diff --git a/3rd_party/static/testapi-ui/components/results-report/resultsReport.html b/3rd_party/static/testapi-ui/components/results-report/resultsReport.html
index 9365f89..576f23e 100644
--- a/3rd_party/static/testapi-ui/components/results-report/resultsReport.html
+++ b/3rd_party/static/testapi-ui/components/results-report/resultsReport.html
@@ -1,46 +1,33 @@
<div class="container-fluid common-main-container">
-<h3>Test Run Results</h3>
+ <h3>Test Run Results</h3>
-<div ng-show="ctrl.testId" class="container-fluid">
+ <div ng-show="ctrl.testId" class="container-fluid">
<div class="row">
- <div class="pull-left">
- <div class="test-report">
- <strong>OVP version:</strong> {{ctrl.version}}<br />
- <strong>Test ID:</strong> {{ctrl.testId}}<br />
- </div>
+ <div class="pull-left">
+ <div class="test-report">
+ <strong>OVP version:</strong> {{ctrl.version}}<br />
+ <strong>Test ID:</strong> {{ctrl.testId}}<br />
</div>
+ </div>
</div>
-</div>
+ </div>
-<strong>Total: {{ctrl.statistics.total}}, Pass: {{ ctrl.statistics.pass}}, Rate: {{ ctrl.statistics.pass / ctrl.statistics.total * 100 | number:2 }}%</strong><br />
-<strong>Mandatory Total: {{ctrl.statistics.mandatory.total}}, Pass: {{ ctrl.statistics.mandatory.pass }}, Rate: {{ ctrl.statistics.mandatory.pass / ctrl.statistics.mandatory.total * 100 | number:2 }}%</strong><br />
-<strong>Optional Total: {{ctrl.statistics.optional.total}}, Pass: {{ ctrl.statistics.optional.pass }}, Rate: {{ ctrl.statistics.optional.pass / ctrl.statistics.optional.total * 100 | number:2 }}%</strong><br />
-<hr>
-<strong>{{ ctrl.validation }}</strong><br />
+ <strong>Total: {{ctrl.statistics.total}}, Pass: {{ ctrl.statistics.pass}}, Rate: {{ ctrl.statistics.pass / ctrl.statistics.total * 100 | number:2 }}%</strong><br />
+ <strong>Mandatory Total: {{ctrl.statistics.mandatory.total}}, Pass: {{ ctrl.statistics.mandatory.pass }}, Rate: {{ ctrl.statistics.mandatory.pass / ctrl.statistics.mandatory.total * 100 | number:2 }}%</strong><br />
+ <strong>Optional Total: {{ctrl.statistics.optional.total}}, Pass: {{ ctrl.statistics.optional.pass }}, Rate: {{ ctrl.statistics.optional.pass / ctrl.statistics.optional.total * 100 | number:2 }}%</strong><br />
+ <hr>
+ <strong>{{ ctrl.validation }}</strong><br />
-<div>
- <hr>
+ <div>
+ <hr />
<h4>Test Result Overview</h4>
-
<uib-accordion close-others=false>
- <!-- The ng-repeat is used to pass in a local variable to the template. -->
- <ng-include
- src="ctrl.detailsTemplate"
- onload="isOpen = true">
- </ng-include>
- <br />
+ <!-- The ng-repeat is used to pass in a local variable to the template. -->
+ <ng-include
+ src="ctrl.detailsTemplate"
+ onload="isOpen = true">
+ </ng-include>
+ <br />
</uib-accordion>
+ </div>
</div>
-</div>
-
-<!--
-<div class="loading">
- <div cg-busy="{promise:resultsRequest,message:'Loading results'}"></div>
-</div>
-
-<div ng-show="ctrl.showError" class="alert alert-danger" role="alert">
- <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
- <span class="sr-only">Error:</span>
- {{ctrl.error}}
-</div>
--->
diff --git a/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html b/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html
index 2f50b0c..5717b54 100644
--- a/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html
+++ b/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html
@@ -1,19 +1,16 @@
<div>
-
- <h4>Enter user name or email</h4>
- <input type="text" ng-model="ctrl.userName" />
-
- <div style="text-align:center;margin-top:20px;">
- <button class="btn btn-default" ng-disabled="ctrl.userName==null || ctrl.userName==''" ng-click="ctrl.addSharedUser(ctrl.tempResult, ctrl.userName)">Commit</button>
- </div>
-
+ <h4>Enter user name or email</h4>
+ <input type="text" ng-model="ctrl.userName" />
+ <div style="text-align: center; margin-top: 20px;">
+ <button class="btn btn-default" ng-disabled="ctrl.userName==null || ctrl.userName==''"
+ ng-click="ctrl.addSharedUser(ctrl.tempResult, ctrl.userName)">Commit</button>
+ </div>
</div>
-
<style>
- input {
- border-radius: 10px;
- border: 1px solid #eeeeee;
- width: 100%;
- }
+ input {
+ border-radius: 10px;
+ border: 1px solid #eeeeee;
+ width: 100%;
+ }
</style>
diff --git a/3rd_party/static/testapi-ui/components/results/results.html b/3rd_party/static/testapi-ui/components/results/results.html
index aebc0f2..913d882 100644
--- a/3rd_party/static/testapi-ui/components/results/results.html
+++ b/3rd_party/static/testapi-ui/components/results/results.html
@@ -1,108 +1,158 @@
<div class="container-fluid common-main-container">
-<h3>{{ctrl.pageHeader}}</h3>
-<p>{{ctrl.pageParagraph}}</p>
-<form class="form-inline" ng-show="ctrl.isUserResults">
-<h4>Upload Results<i class="glyphicon glyphicon-question-sign opnfv-blue" uib-tooltip="results file is logs.xxx.tar.gz under your dovetail installation path"></i></h4>
-<div class="form-group col-m-3">
- <input class="form-contrl btn btn-success cvp-btn medium accent-color regular-button" type = "file" file-model = "resultFile"/>
-</div>
-<div class="form-group col-m-3">
- <a class="btn btn-success cvp-btn medium accent-color regular-button" ng-click="ctrl.uploadFile()"><span>upload result</span></a>
-</div>
-<div>
-<label>{{ctrl.uploadState}}</label>
-</div>
-</form>
-<div class="row" style="margin-bottom:24px;"></div>
-<div cg-busy="{promise:ctrl.authRequest,message:'Loading'}"></div>
-<div cg-busy="{promise:ctrl.resultsRequest,message:'Loading'}"></div>
+ <h3>{{ctrl.pageHeader}}</h3>
+ <p>{{ctrl.pageParagraph}}</p>
+ <form class="form-inline" ng-show="ctrl.isUserResults">
+ <h4>Upload Results
+ <i class="glyphicon glyphicon-question-sign opnfv-blue"
+ uib-tooltip="results file is logs.xxx.tar.gz under your dovetail installation path"></i>
+ </h4>
+ <div class="form-group col-m-3">
+ <input class="form-contrl btn btn-success cvp-btn medium accent-color regular-button" type="file"
+ file-model="resultFile"/>
+ </div>
+ <div class="form-group col-m-3">
+ <a class="btn btn-success cvp-btn medium accent-color regular-button" ng-click="ctrl.uploadFile()">
+ <span>upload result</span>
+ </a>
+ </div>
+ <div>
+ <label>{{ctrl.uploadState}}</label>
+ </div>
+ </form>
+ <div class="row" style="margin-bottom: 24px;"></div>
+ <div cg-busy="{promise:ctrl.authRequest,message:'Loading'}"></div>
+ <div cg-busy="{promise:ctrl.resultsRequest,message:'Loading'}"></div>
-<div ng-show="ctrl.data" class="results-table" style="width:100%;overflow-x:scroll">
+ <div ng-show="ctrl.data" class="results-table" style="width: 100%; overflow-x: scroll;">
<table ng-data="ctrl.data.result" ng-show="ctrl.data" class="table table-striped table-hover">
- <thead>
- <tr>
- <th>Upload Date</th>
- <th>Test ID</th>
- <th>OVP Version</th>
- <th>Owner</th>
- <th>File Name</th>
- <th>Label</th>
- <th>Status</th>
- <th>Log</th>
- <th>SUT</th>
- <th>SUT Version</th>
- <th class="col-md-2">Operation</th>
- <th class="col-md-2">Share List</th>
- </tr>
- </thead>
-
- <tbody style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
- <tr ng-repeat="(index, result) in ctrl.data.tests">
- <td>{{ result.upload_date | limitTo:19}}</td>
- <td><a uib-tooltip="{{ result.id }}" tooltip-placement="top" tooltip-append-to-body="true" ng-click="ctrl.gotoResultDetail(result.id, result._id)">{{ result.id | limitTo:8 }}</a></td>
- <td>{{ result.version || "2018.01" }}</td>
- <td>{{ result.owner }}</td>
- <td>{{ result.filename || "None"}}</td>
- <td><div class="popover-wrapper"><a editable-theme="bs3" onbeforesave="ctrl.changeLabel(result, 'label', $data)" editable-text="result.label"> {{ result.label || "None" }}</a></div></td>
- <td>{{ result.status }}</td>
- <td><a ng-click="ctrl.downloadLogs(result.id)">logs</a></td>
- <td><a ng-click="ctrl.gotoSUT(result.id)">info</a></td>
- <td><div class="popover-wrapper"><a editable-theme="bs3" onbeforesave="ctrl.changeLabel(result, 'sut_label', $data)" editable-text="result.sut_label"> {{ result.sut_label || "None" }}</a></div></td>
- <td>
- <div class="btn-group" uib-dropdown>
- <a id="single-button" type="button" class="btn btn-success cvp-btn medium accent-color regular-button" uib-dropdown-toggle>
- Operation<span class="caret"></span>
- </a>
- <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button">
- <li role="menuitem" ng-if="auth.currentUser.openid == result.owner" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-class="{'hide': result.status == 'private'}" ng-click="ctrl.toPrivate(result, 'private')">withdraw submit</a></li>
- <li role="menuitem" ng-if="auth.currentUser.openid == result.owner" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-class="{'hide': result.status != 'private'}" ng-click="ctrl.toReview(result, 'review')">submit to review</a></li>
- <li role="menuitem" ng-if="auth.currentUser.role.indexOf('administrator') != -1" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-class="{'hide': result.status == 'approved' || result.status == 'private'}" ng-click="ctrl.toggleCheck(result, 'status', 'approved')">approve</a></li>
- <li role="menuitem" ng-if="auth.currentUser.role.indexOf('administrator') != -1" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-class="{'hide': result.status == 'not approved' || result.status == 'private'}" ng-click="ctrl.toggleCheck(result, 'status', 'not approved')">not approve</a></li>
- <li role="menuitem" ng-if="auth.currentUser.openid == result.owner" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-click="ctrl.openSharedModal(result)">share with</a></li>
- <li role="menuitem" ng-if="auth.currentUser.openid == result.owner" class="menu-item menu-item-type-post_type menu-item-object-page"><a ng-click="ctrl.deleteTest(result._id)">delete</a></li>
- </ul>
- </div>
- </td>
- <td>
- <div class="btn-group" uib-dropdown>
- <a id="single-button" type="button" class="btn btn-success cvp-btn medium accent-color regular-button" style="width:130px" uib-dropdown-toggle>
- Share List<span class="caret"></span>
- </a>
- <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button" style="min-width:200%">
- <li class="menu-item menu-item-type-post_type menu-item-object-page" role="menuitem" ng-repeat="share in result.shared track by $index"><span>{{ share }}<i ng-if="auth.currentUser.openid == result.owner" class="pull-right glyphicon glyphicon-remove" ng-click="ctrl.removeSharedUser(result, share)"></i></span></li>
- </ul>
- </div>
- </td>
+ <thead>
+ <tr>
+ <th>Upload Date</th>
+ <th>Test ID</th>
+ <th>OVP Version</th>
+ <th>Owner</th>
+ <th>File Name</th>
+ <th>Label</th>
+ <th>Status</th>
+ <th>Log</th>
+ <th>SUT</th>
+ <th>SUT Version</th>
+ <th class="col-md-2">Operation</th>
+ <th class="col-md-2">Share List</th>
+ </tr>
+ </thead>
- </tr>
- </tbody>
+ <tbody style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
+ <tr ng-repeat="(index, result) in ctrl.data.tests">
+ <td>{{ result.upload_date | limitTo:19}}</td>
+ <td>
+ <a uib-tooltip="{{ result.id }}" tooltip-placement="top" tooltip-append-to-body="true"
+ ng-click="ctrl.gotoResultDetail(result.id, result._id)">{{ result.id | limitTo:8 }}</a>
+ </td>
+ <td>{{ result.version || "2018.01" }}</td>
+ <td>{{ result.owner }}</td>
+ <td>{{ result.filename || "None"}}</td>
+ <td>
+ <div class="popover-wrapper">
+ <a editable-theme="bs3" onbeforesave="ctrl.changeLabel(result, 'label', $data)"
+ editable-text="result.label">{{ result.label || "None" }}</a>
+ </div>
+ </td>
+ <td>{{ result.status }}</td>
+ <td><a ng-click="ctrl.downloadLogs(result.id)">logs</a></td>
+ <td><a ng-click="ctrl.gotoSUT(result.id)">info</a></td>
+ <td>
+ <div class="popover-wrapper">
+ <a editable-theme="bs3" onbeforesave="ctrl.changeLabel(result, 'sut_label', $data)"
+ editable-text="result.sut_label">{{ result.sut_label || "None" }}</a>
+ </div>
+ </td>
+ <td>
+ <div class="btn-group" uib-dropdown>
+ <a id="single-button" type="button" class="btn btn-success cvp-btn medium accent-color regular-button"
+ uib-dropdown-toggle>
+ Operation<span class="caret"></span>
+ </a>
+ <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button">
+ <li role="menuitem" ng-if="auth.currentUser.openid == result.owner"
+ class="menu-item menu-item-type-post_type menu-item-object-page">
+ <a ng-class="{'hide': result.status == 'private'}"
+ ng-click="ctrl.toPrivate(result, 'private')">withdraw submit</a>
+ </li>
+ <li role="menuitem" ng-if="auth.currentUser.openid == result.owner"
+ class="menu-item menu-item-type-post_type menu-item-object-page">
+ <a ng-class="{'hide': result.status != 'private'}"
+ ng-click="ctrl.toReview(result, 'review')">submit to review</a>
+ </li>
+ <li role="menuitem" ng-if="auth.currentUser.role.indexOf('administrator') != -1"
+ class="menu-item menu-item-type-post_type menu-item-object-page">
+ <a ng-class="{'hide': result.status == 'approved' || result.status == 'private'}"
+ ng-click="ctrl.toggleCheck(result, 'status', 'approved')">approve</a>
+ </li>
+ <li role="menuitem" ng-if="auth.currentUser.role.indexOf('administrator') != -1"
+ class="menu-item menu-item-type-post_type menu-item-object-page">
+ <a ng-class="{'hide': result.status == 'not approved' || result.status == 'private'}"
+ ng-click="ctrl.toggleCheck(result, 'status', 'not approved')">not approve</a>
+ </li>
+ <li role="menuitem" ng-if="auth.currentUser.openid == result.owner"
+ class="menu-item menu-item-type-post_type menu-item-object-page">
+ <a ng-click="ctrl.openSharedModal(result)">share with</a>
+ </li>
+ <li role="menuitem" ng-if="auth.currentUser.openid == result.owner"
+ class="menu-item menu-item-type-post_type menu-item-object-page">
+ <a ng-click="ctrl.deleteTest(result._id)">delete</a>
+ </li>
+ </ul>
+ </div>
+ </td>
+ <td>
+ <div class="btn-group" uib-dropdown>
+ <a id="single-button" type="button"
+ class="btn btn-success cvp-btn medium accent-color regular-button" style="width: 130px;"
+ uib-dropdown-toggle>
+ Share List<span class="caret"></span>
+ </a>
+ <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button"
+ style="min-width: 200%;">
+ <li class="menu-item menu-item-type-post_type menu-item-object-page" role="menuitem"
+ ng-repeat="share in result.shared track by $index">
+ <span>
+ {{ share }}
+ <i ng-if="auth.currentUser.openid == result.owner" class="pull-right glyphicon glyphicon-remove"
+ ng-click="ctrl.removeSharedUser(result, share)"></i>
+ </span>
+ </li>
+ </ul>
+ </div>
+ </td>
+ </tr>
+ </tbody>
</table>
-
<div class="pages">
- <uib-pagination
- total-items="ctrl.totalItems"
- ng-model="ctrl.currentPage"
- items-per-page="ctrl.itemsPerPage"
- max-size="ctrl.maxSize"
- class="pagination-sm"
- boundary-links="true"
- rotate="false"
- num-pages="ctrl.numPages"
- ng-change="ctrl.update()">
- </uib-pagination>
+ <uib-pagination
+ total-items="ctrl.totalItems"
+ ng-model="ctrl.currentPage"
+ items-per-page="ctrl.itemsPerPage"
+ max-size="ctrl.maxSize"
+ class="pagination-sm"
+ boundary-links="true"
+ rotate="false"
+ num-pages="ctrl.numPages"
+ ng-change="ctrl.update()">
+ </uib-pagination>
</div>
+ </div>
</div>
-</div>
<div ng-show="ctrl.showError" class="alert alert-danger" role="alert">
- <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
- <span class="sr-only">Error:</span>
- {{ctrl.error}}
+ <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
+ <span class="sr-only">Error:</span>
+ {{ctrl.error}}
</div>
<style>
-.button-disabled {
- pointer-events:none;
-}
+ .button-disabled {
+ pointer-events: none;
+ }
</style>
diff --git a/3rd_party/static/testapi-ui/components/sut/sut.html b/3rd_party/static/testapi-ui/components/sut/sut.html
index 3426894..ec6b20c 100644
--- a/3rd_party/static/testapi-ui/components/sut/sut.html
+++ b/3rd_party/static/testapi-ui/components/sut/sut.html
@@ -1,42 +1,43 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
-
-<link rel="stylesheet" href="testapi-ui/assets/css/combine.css" />
-
-<div class="container-fluid common-main-container">
-<h2>Endpoints</h2>
-<div class="results-table" style="margin-top:30px">
- <table class="table table-striped table-hover">
+<!DOCTYPE html>
+<head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+ <link rel="stylesheet" href="testapi-ui/assets/css/combine.css" />
+</head>
+<body>
+ <div class="container-fluid common-main-container">
+ <h2>Endpoints</h2>
+ <div class="results-table" style="margin-top: 30px;">
+ <table class="table table-striped table-hover">
<thead>
- <tr>
- <th>Service Name</th>
- <th>Service Type</th>
- <th>URL</th>
- <th>Enabled</th>
- </tr>
+ <tr>
+ <th>Service Name</th>
+ <th>Service Type</th>
+ <th>URL</th>
+ <th>Enabled</th>
+ </tr>
</thead>
<tbody style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
- <tr ng-repeat="endpoint in ctrl.sutData.endpoint_info">
- <td>{{ endpoint['Service Name'] }}</td>
- <td>{{ endpoint['Service Type'] }}</td>
- <td>{{ endpoint['URL'] }}</td>
- <td>{{ endpoint['Enabled'] }}</td>
- </tr>
+ <tr ng-repeat="endpoint in ctrl.sutData.endpoint_info">
+ <td>{{ endpoint['Service Name'] }}</td>
+ <td>{{ endpoint['Service Type'] }}</td>
+ <td>{{ endpoint['URL'] }}</td>
+ <td>{{ endpoint['Enabled'] }}</td>
+ </tr>
</tbody>
- </table>
-</div>
-
-<h2>Hosts</h2>
-<div ng-repeat="(host, info) in ctrl.sutData.hardware_info">
- <div class="results-table" style="margin-top:30px;">
+ </table>
+ </div>
+ <h2>Hosts</h2>
+ <div ng-repeat="(host, info) in ctrl.sutData.hardware_info">
+ <div class="results-table" style="margin-top: 30px;">
<table class="table table-striped table-hover">
- <tbody style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
- <tr ng-repeat="record in info">
- <td>{{ record[0] }}</td>
- <td>{{ record[1] }}</td>
- </tr>
- </tbody>
+ <tbody style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
+ <tr ng-repeat="record in info">
+ <td>{{ record[0] }}</td>
+ <td>{{ record[1] }}</td>
+ </tr>
+ </tbody>
</table>
+ </div>
</div>
-</div>
-</div>
+ </div>
+</body>