aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStamatis Katsaounis <mokats@intracom-telecom.com>2018-11-26 11:25:29 +0200
committerStamatis Katsaounis <mokats@intracom-telecom.com>2018-11-26 16:19:26 +0200
commit2735ea8a2aef55ebb0a48b50d9a0e36cf3f63b94 (patch)
treeeec3f232637faf06c83391c47f4f88effdcbe7e4
parentf62c0dd0a33b444505ad0c1bdaddc5e0a86a11a6 (diff)
Update tox to run htmllint and csslint
JIRA: DOVETAIL-753 This patch adds a new tox environment to run htmllint and csslint. Furthermore, it fixes any leftover html and css errors. Change-Id: Ie3fda8d89b3d52851debe1a4271ffd0ac8fbee68 Signed-off-by: Stamatis Katsaounis <mokats@intracom-telecom.com>
-rw-r--r--.coveragerc6
-rw-r--r--.csslintrc22
-rw-r--r--.htmllintrc69
-rw-r--r--3rd_party/static/swagger/css/hightlight.default.css135
-rw-r--r--3rd_party/static/swagger/css/screen.css2
-rw-r--r--3rd_party/static/swagger/index.html14
-rw-r--r--3rd_party/static/swagger/o2c.html2
-rw-r--r--3rd_party/static/testapi-ui/assets/css/ascend.css45
-rw-r--r--3rd_party/static/testapi-ui/assets/css/combine.css35
-rw-r--r--3rd_party/static/testapi-ui/assets/css/home/home.css7
-rw-r--r--3rd_party/static/testapi-ui/components/about/templates/README.html24
-rw-r--r--3rd_party/static/testapi-ui/components/application/application.html50
-rw-r--r--3rd_party/static/testapi-ui/components/auth/authPortal.html2
-rw-r--r--3rd_party/static/testapi-ui/components/directory/directory.html14
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/guidelines.html2
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html10
-rw-r--r--3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html6
-rw-r--r--3rd_party/static/testapi-ui/components/home/home.html48
-rw-r--r--3rd_party/static/testapi-ui/components/results-report/partials/editTestModal.html6
-rw-r--r--3rd_party/static/testapi-ui/components/results-report/partials/reportDetails.html16
-rw-r--r--3rd_party/static/testapi-ui/components/results-report/resultsReport.html16
-rw-r--r--3rd_party/static/testapi-ui/components/results/modal/sharedModal.html2
-rw-r--r--3rd_party/static/testapi-ui/components/results/results.html6
-rw-r--r--3rd_party/static/testapi-ui/components/sut/sut.html5
-rw-r--r--3rd_party/static/testapi-ui/index.html44
-rw-r--r--3rd_party/static/testapi-ui/shared/header/header.html4
-rw-r--r--node-requirements.txt2
-rw-r--r--tox.ini15
28 files changed, 297 insertions, 312 deletions
diff --git a/.coveragerc b/.coveragerc
new file mode 100644
index 0000000..c6af317
--- /dev/null
+++ b/.coveragerc
@@ -0,0 +1,6 @@
+[run]
+omit = opnfv_testapi/tests/*
+[report]
+exclude_lines =
+ pass
+ main()
diff --git a/.csslintrc b/.csslintrc
new file mode 100644
index 0000000..3252905
--- /dev/null
+++ b/.csslintrc
@@ -0,0 +1,22 @@
+{
+ "ignore": [
+ "order-alphabetical",
+ "zero-units",
+ "box-model",
+ "adjoining-classes",
+ "ids",
+ "important",
+ "floats",
+ "unique-headings",
+ "qualified-headings",
+ "outline-none",
+ "overqualified-elements",
+ "font-sizes",
+ "universal-selector",
+ "box-sizing",
+ "text-indent",
+ "regex-selectors",
+ "gradients",
+ "fallback-colors"
+ ]
+}
diff --git a/.htmllintrc b/.htmllintrc
new file mode 100644
index 0000000..155294b
--- /dev/null
+++ b/.htmllintrc
@@ -0,0 +1,69 @@
+{
+ "plugins": [], // npm modules to load
+
+ "maxerr": false,
+ "raw-ignore-regex": false,
+ "attr-bans": [
+ "align",
+ "background",
+ "bgcolor",
+ "border",
+ "frameborder",
+ "longdesc",
+ "marginwidth",
+ "marginheight",
+ "scrolling",
+ "width"
+ ],
+ "indent-delta": false,
+ "indent-style": "spaces",
+ "indent-width": 2,
+ "indent-width-cont": true,
+ "spec-char-escape": false,
+ "text-ignore-regex": false,
+ "tag-bans": [
+ "b"
+ ],
+ "tag-close": true,
+ "tag-name-lowercase": true,
+ "tag-name-match": true,
+ "tag-self-close": "never",
+ "doctype-first": "smart",
+ "doctype-html5": true,
+ "attr-name-style": "dash",
+ "attr-name-ignore-regex": false,
+ "attr-no-dup": true,
+ "attr-no-unsafe-char": true,
+ "attr-order": false,
+ "attr-quote-style": false,
+ "attr-req-value": false,
+ "attr-new-line": false,
+ "attr-validate": false,
+ "id-no-dup": true,
+ "id-class-no-ad": false,
+ "id-class-style": false,
+ "class-no-dup": true,
+ "class-style": false,
+ "id-class-ignore-regex": false,
+ "img-req-alt": true,
+ "img-req-src": false,
+ "html-valid-content-model": true,
+ "head-valid-content-model": true,
+ "href-style": false,
+ "label-req-for": false,
+ "line-end-style": "lf",
+ "line-no-trailing-whitespace": true,
+ "line-max-len": 240,
+ "line-max-len-ignore-regex": false,
+ "head-req-title": true,
+ "title-no-dup": true,
+ "title-max-len": 70,
+ "html-req-lang": false,
+ "lang-style": "case",
+ "fig-req-figcaption": false,
+ "focusable-tabindex-style": false,
+ "input-radio-req-name": true,
+ "input-req-label": false,
+ "table-req-caption": false,
+ "table-req-header": false
+}
diff --git a/3rd_party/static/swagger/css/hightlight.default.css b/3rd_party/static/swagger/css/hightlight.default.css
deleted file mode 100644
index e417fc1..0000000
--- a/3rd_party/static/swagger/css/hightlight.default.css
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
-
-Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
-
-*/
-
-pre code {
- display: block; padding: 0.5em;
- background: #F0F0F0;
-}
-
-pre code,
-pre .subst,
-pre .tag .title,
-pre .lisp .title,
-pre .clojure .built_in,
-pre .nginx .title {
- color: black;
-}
-
-pre .string,
-pre .title,
-pre .constant,
-pre .parent,
-pre .tag .value,
-pre .rules .value,
-pre .rules .value .number,
-pre .preprocessor,
-pre .ruby .symbol,
-pre .ruby .symbol .string,
-pre .aggregate,
-pre .template_tag,
-pre .django .variable,
-pre .smalltalk .class,
-pre .addition,
-pre .flow,
-pre .stream,
-pre .bash .variable,
-pre .apache .tag,
-pre .apache .cbracket,
-pre .tex .command,
-pre .tex .special,
-pre .erlang_repl .function_or_atom,
-pre .markdown .header {
- color: #800;
-}
-
-pre .comment,
-pre .annotation,
-pre .template_comment,
-pre .diff .header,
-pre .chunk,
-pre .markdown .blockquote {
- color: #888;
-}
-
-pre .number,
-pre .date,
-pre .regexp,
-pre .literal,
-pre .smalltalk .symbol,
-pre .smalltalk .char,
-pre .go .constant,
-pre .change,
-pre .markdown .bullet,
-pre .markdown .link_url {
- color: #080;
-}
-
-pre .label,
-pre .javadoc,
-pre .ruby .string,
-pre .decorator,
-pre .filter .argument,
-pre .localvars,
-pre .array,
-pre .attr_selector,
-pre .important,
-pre .pseudo,
-pre .pi,
-pre .doctype,
-pre .deletion,
-pre .envvar,
-pre .shebang,
-pre .apache .sqbracket,
-pre .nginx .built_in,
-pre .tex .formula,
-pre .erlang_repl .reserved,
-pre .prompt,
-pre .markdown .link_label,
-pre .vhdl .attribute,
-pre .clojure .attribute,
-pre .coffeescript .property {
- color: #88F
-}
-
-pre .keyword,
-pre .id,
-pre .phpdoc,
-pre .title,
-pre .built_in,
-pre .aggregate,
-pre .css .tag,
-pre .javadoctag,
-pre .phpdoc,
-pre .yardoctag,
-pre .smalltalk .class,
-pre .winutils,
-pre .bash .variable,
-pre .apache .tag,
-pre .go .typename,
-pre .tex .command,
-pre .markdown .strong,
-pre .request,
-pre .status {
- font-weight: bold;
-}
-
-pre .markdown .emphasis {
- font-style: italic;
-}
-
-pre .nginx .built_in {
- font-weight: normal;
-}
-
-pre .coffeescript .javascript,
-pre .javascript .xml,
-pre .tex .formula,
-pre .xml .javascript,
-pre .xml .vbscript,
-pre .xml .css,
-pre .xml .cdata {
- opacity: 0.5;
-}
diff --git a/3rd_party/static/swagger/css/screen.css b/3rd_party/static/swagger/css/screen.css
index 2882b8d..1f22ecb 100644
--- a/3rd_party/static/swagger/css/screen.css
+++ b/3rd_party/static/swagger/css/screen.css
@@ -1035,7 +1035,7 @@ table {
color: black;
}
.title {
- font-style: bold;
+ font-weight: bold;
}
.secondary_form {
display: none;
diff --git a/3rd_party/static/swagger/index.html b/3rd_party/static/swagger/index.html
index db209f4..521a375 100644
--- a/3rd_party/static/swagger/index.html
+++ b/3rd_party/static/swagger/index.html
@@ -2,9 +2,9 @@
<html>
<head>
<title>Swagger UI</title>
- <link href='https://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'/>
- <link href='css/highlight.default.css' media='screen' rel='stylesheet' type='text/css'/>
- <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
+ <link href='https://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
+ <link href='css/highlight.default.css' media='screen' rel='stylesheet' type='text/css'>
+ <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'>
<script type="text/javascript" src="lib/shred.bundle.js"></script>
<script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
<script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
@@ -67,13 +67,13 @@
<a id="logo" href="http://swagger.wordnik.com">swagger</a>
<form id='api_selector'>
<div class='input icon-btn'>
- <img id="show-pet-store-icon" src="images/pet_store_api.png" title="Show Swagger Petstore Example Apis">
+ <img id="show-pet-store-icon" src="images/pet_store_api.png" title="Show Swagger Petstore Example Apis" alt="Petstore">
</div>
<div class='input icon-btn'>
- <img id="show-wordnik-dev-icon" src="images/wordnik_api.png" title="Show Wordnik Developer Apis">
+ <img id="show-wordnik-dev-icon" src="images/wordnik_api.png" title="Show Wordnik Developer Apis" alt="Wordnik">
</div>
- <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
- <div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>
+ <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"></div>
+ <div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"></div>
<div class='input'><a id="explore" href="#">Explore</a></div>
</form>
</div>
diff --git a/3rd_party/static/swagger/o2c.html b/3rd_party/static/swagger/o2c.html
index d32d130..2f8a6a5 100644
--- a/3rd_party/static/swagger/o2c.html
+++ b/3rd_party/static/swagger/o2c.html
@@ -12,4 +12,4 @@ qp = qp ? JSON.parse('{"' + qp.replace(/&/g, '","').replace(/=/g,'":"') + '"}',
):{}
window.opener.onOAuthComplete(qp);
window.close();
-</script> \ No newline at end of file
+</script>
diff --git a/3rd_party/static/testapi-ui/assets/css/ascend.css b/3rd_party/static/testapi-ui/assets/css/ascend.css
index 258cf0b..0c1bbe6 100644
--- a/3rd_party/static/testapi-ui/assets/css/ascend.css
+++ b/3rd_party/static/testapi-ui/assets/css/ascend.css
@@ -88,12 +88,12 @@ body .vc_text_separator div,
.ascend .nectar-progress-bar .bar-wrap,
.ascend .nectar-progress-bar span {
- box-shadow: none;
-webkit-box-shadow: none;
-o-box-shadow: none;
- border-radius: 0;
+ box-shadow: none;
-webkit-border-radius: 0;
-o-border-radius: 0;
+ border-radius: 0;
}
body .carousel-wrap[data-full-width="false"] .control-wrap {
@@ -494,8 +494,9 @@ body.ascend #search-outer #search input[type="text"] {
}
#search-outer #search #close a:hover {
- transform: rotate(90deg) translateZ(0);
+ -ms-transform: rotate(90deg) translateZ(0);
-webkit-transform: rotate(90deg) translateZ(0);
+ transform: rotate(90deg) translateZ(0);
}
#search-outer #search .span_12 span {
@@ -755,10 +756,10 @@ article.post .more-link span,
.ascend .col.boxed,
.ascend .wpb_column.boxed {
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-o-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
background-color: #fff;
padding: 25px 15px 15px;
position: relative;
@@ -770,12 +771,13 @@ article.post .more-link span,
.ascend .col.boxed:hover,
.ascend .wpb_column.boxed:hover {
- transform: translateY(-4px) !important;
+ -ms-transform: translateY(-4px) !important;
-webkit-transform: translateY(-4px) !important;
- box-shadow: 0 17px 25px rgba(0, 0, 0, 0.13) !important;
+ transform: translateY(-4px) !important;
-webkit-box-shadow: 0 17px 25px rgba(0, 0, 0, 0.13);
-moz-box-shadow: 0 17px 25px rgba(0, 0, 0, 0.13);
-o-box-shadow: 0 17px 25px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 17px 25px rgba(0, 0, 0, 0.13) !important;
}
.ascend a.pp_arrow_previous,
@@ -895,8 +897,9 @@ a.pp_arrow_next {
.woocommerce .pswp__button--arrow--right:after,
.woocommerce .pswp__button--arrow--left:after {
top: 17px;
- transform: translateX(-27px);
+ -ms-transform: translateX(-27px);
-webkit-transform: translateX(-27px);
+ transform: translateX(-27px);
}
.ascend .mfp-arrow-left:after,
@@ -946,50 +949,58 @@ a.pp_arrow_next {
.mfp-arrow-right:hover:after,
.woocommerce .pswp__button--arrow--right:hover:after {
opacity: 1;
- transform: translateX(-18px);
+ -ms-transform: translateX(-18px);
-webkit-transform: translateX(-18px);
+ transform: translateX(-18px);
}
.mfp-arrow-right:hover:before,
.woocommerce .pswp__button--arrow--right:hover:before {
- transform: translateX(9px);
+ -ms-transform: translateX(9px);
-webkit-transform: translateX(9px);
+ transform: translateX(9px);
}
.mfp-arrow-left:hover:before,
.woocommerce .pswp__button--arrow--left:hover:before {
- transform: translateX(-9px);
+ -ms-transform: translateX(-9px);
-webkit-transform: translateX(-9px);
+ transform: translateX(-9px);
}
.mfp-arrow-right:hover:after,
.woocommerce .pswp__button--arrow--right:hover:after {
- transform: translateX(-1px);
+ -ms-transform: translateX(-1px);
-webkit-transform: translateX(-1px);
+ transform: translateX(-1px);
}
.ascend a.pp_arrow_next:hover .icon-default-style {
- transform: translateX(7px);
+ -ms-transform: translateX(7px);
-webkit-transform: translateX(7px);
+ transform: translateX(7px);
}
.ascend a.pp_arrow_previous:hover .icon-default-style:after,
.mfp-arrow-left:hover:after,
.woocommerce .pswp__button--arrow--left:hover:after {
opacity: 1;
- transform: translateX(-51px);
+ -ms-transform: translateX(-51px);
-webkit-transform: translateX(-51px);
+ transform: translateX(-51px);
}
.mfp-arrow-left:hover:after,
.woocommerce .pswp__button--arrow--left:hover:after {
- transform: translateX(-58px);
+ -ms-transform: translateX(-58px);
-webkit-transform: translateX(-58px);
+ transform: translateX(-58px);
}
.ascend a.pp_arrow_previous:hover .icon-default-style {
- transform: translateX(-7px);
+ -ms-transform: translateX(-7px);
-webkit-transform: translateX(-7px);
+ transform: translateX(-7px);
}
.container-wrap input[type="text"],
@@ -1002,10 +1013,10 @@ a.pp_arrow_next {
.container-wrap input[type="date"] {
background-color: transparent !important;
border: 1px solid #ccc !important;
- box-shadow: none !important;
-webkit-box-shadow: none !important;
- font-size: 16px !important;
-o-box-shadow: none !important;
+ box-shadow: none !important;
+ font-size: 16px !important;
padding: 16px !important;
}
diff --git a/3rd_party/static/testapi-ui/assets/css/combine.css b/3rd_party/static/testapi-ui/assets/css/combine.css
index 7d29159..5b3ed96 100644
--- a/3rd_party/static/testapi-ui/assets/css/combine.css
+++ b/3rd_party/static/testapi-ui/assets/css/combine.css
@@ -216,6 +216,7 @@ ul.tabs {
margin: auto;
background-color: #f5f5f5;
-webkit-border-radius: 3px;
+ border-radius: 3px;
border: 1px solid #d8d8d8;
border-top: 1px solid #bcbcbc;
}
@@ -239,7 +240,6 @@ ul.tabs {
.tabs li a {
margin: 0px;
display: inline-block;
- text-align: left;
color: #41728d;
font-size: 13px;
font-family: 'PT Sans', serif;
@@ -284,13 +284,12 @@ a.button {
text-decoration: none;
font-size: 14px;
line-height: 3em;
- background: #ddd;
- box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
text-shadow: #fff 0px 1px 1px;
background: -webkit-gradient(linear, left top, left bottom, from(#eeeeee), to(#bebebe));
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bebebe');
+ background: #ddd;
}
a.button:hover {
@@ -299,12 +298,12 @@ a.button:hover {
}
a.button:active {
- background: #ababab;
- box-shadow: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
+ box-shadow: none;
border-color: #ababab;
border-top-color: #636363;
+ background: #ababab;
background: -webkit-gradient(linear, left top, left bottom, from(#bebebe), to(#dddddd));
-webkit-transition: none;
padding: 4px 29px 2px 31px !important;
@@ -326,15 +325,13 @@ input.action {
/* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #FFFFFF), color-stop(50%, #F3F3F3), color-stop(100%, #EBEBEB));
/* webkit */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#EBEBEB',GradientType=0 );
- /* ie */
- box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2);
+ box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);
text-shadow: #fff 0px 1px 1px;
- border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
+ border-radius: 3px;
border-bottom-color: #a0a0a0;
border-right-color: #bababa;
border-left-color: #bababa;
@@ -349,12 +346,12 @@ input.action:hover {
a.roundedButton:active,
input.action:active {
- background: #ababab;
- box-shadow: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
+ box-shadow: none;
border-color: #ababab;
border-top-color: #636363;
+ background: #ababab;
background: -webkit-gradient(linear, left top, left bottom, from(#bebebe), to(#dddddd));
-webkit-transition: none;
padding: 4px 15px;
@@ -593,6 +590,7 @@ a.downloadLink {
padding-right: 7px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
+ border-radius: 3px;
color: #757575;
font-size: 0.7em;
text-decoration: none;
@@ -717,9 +715,9 @@ ul#quotes p.name strong {
background: rgba(0, 0, 0, 0.8);
padding: 1px 8px;
color: white;
- border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
+ border-radius: 4px;
}
a.Datasheet {
@@ -809,6 +807,7 @@ ul.user-project-list li {
background-color: #e2f1f5;
border: 1px solid #89c6d6;
-webkit-border-radius: 3px;
+ border-radius: 3px;
padding: 2px 8px;
margin-bottom: 5px;
color: #1a4b6b;
@@ -870,10 +869,12 @@ ul.user-project-list li {
.user-photo img {
border: 5px solid white;
-webkit-box-shadow: 3px 2px 2px rgba(0, 0, 0, 0.3);
+ box-shadow: 3px 2px 2px rgba(0, 0, 0, 0.3);
}
.siteMessage {
-webkit-border-radius: 4px;
+ border-radius: 4px;
border: 1px solid;
margin-bottom: 10px;
margin-top: 20px;
@@ -1790,6 +1791,7 @@ a.featured-link:hover {
.news-section .news-wrapper ul {
margin: 30px 0;
+ -moz-padding-start: 0;
-webkit-padding-start: 0;
}
@@ -1977,6 +1979,7 @@ a.featured-link:hover {
.footer-links ul {
margin-left: 0;
+ -moz-padding-start: 0;
-webkit-padding-start: 0;
}
@@ -2660,8 +2663,7 @@ ul.marketplace-nav li:last-child {
@media (max-width: 680px) {
ul.marketplace-nav li {
- display: block;
- float: left;
+ display: table-cell;
border-right: none;
text-align: left;
border-bottom: 1px solid #e8e8e8;
@@ -2708,7 +2710,6 @@ ul.marketplace-nav a span {
ul.marketplace-nav a span {
display: table-cell;
vertical-align: middle;
- float: left;
}
}
@@ -3428,7 +3429,6 @@ i.mobile-expand {
i.mobile-expand {
position: relative;
display: inline-block;
- float: right;
cursor: pointer;
}
@@ -3448,7 +3448,6 @@ i.mobile-expand {
.navbar-nav > li.open i.mobile-expand {
position: relative;
display: inline-block;
- float: right;
cursor: pointer;
}
diff --git a/3rd_party/static/testapi-ui/assets/css/home/home.css b/3rd_party/static/testapi-ui/assets/css/home/home.css
index b806151..66b3a8e 100644
--- a/3rd_party/static/testapi-ui/assets/css/home/home.css
+++ b/3rd_party/static/testapi-ui/assets/css/home/home.css
@@ -38,7 +38,7 @@
}
#directory_inner tr {
- vertical-align: center;
+ vertical-align: middle;
}
#directory_inner {
@@ -63,10 +63,7 @@
}
.company_logo {
- padding-right: 30px;
- padding-left: 20px;
- padding-top: 20px;
- padding-bottom: 20px;
+ padding: 20px 30px 20px 20px;
}
.company_row:hover {
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 538ffb8..4be7c8d 100644
--- a/3rd_party/static/testapi-ui/components/about/templates/README.html
+++ b/3rd_party/static/testapi-ui/components/about/templates/README.html
@@ -38,12 +38,12 @@ defined by the community under the oversight of the Technical Steering Committee
<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>
+<h2>Program Management &amp; 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>
+<h3>Role of C&amp;C Committee</h3>
+<p>The OPNFV Certification &amp; Compliance (C&amp;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.
@@ -90,9 +90,9 @@ endorse any products or appear to endorse any products.</p>
<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>The OPNFV C&amp;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>
@@ -125,7 +125,7 @@ respect to the confirmed category.</p>
Logo/Trademark, program documents, or compliance verification procedures.</p>
-<h2>Compliance Verification & Application Requirements</h2>
+<h2>Compliance Verification &amp; 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
@@ -170,8 +170,8 @@ and validity. Based on the determination of the Committee, a recommendation will
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>
+participating in the review committee (a C&amp;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>
@@ -180,7 +180,7 @@ Directors. An appeals process is documented in the Escalation Process below.</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
+apply to use the OPNFV Ready trademark. The C&amp;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>
diff --git a/3rd_party/static/testapi-ui/components/application/application.html b/3rd_party/static/testapi-ui/components/application/application.html
index 6bd62f4..28b15ab 100644
--- a/3rd_party/static/testapi-ui/components/application/application.html
+++ b/3rd_party/static/testapi-ui/components/application/application.html
@@ -1,9 +1,9 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
- <meta http-equiv="Content-type" content="text/html; 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" />
+ <link rel="stylesheet" href="testapi-ui/assets/css/combine.css">
</head>
<body id="logo-request">
<div class="container-fluid common-main-container">
@@ -24,7 +24,7 @@
<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" />
+ aria-required="true">
</div>
</div>
<div class="field text col-md-4">
@@ -33,7 +33,7 @@
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" />
+ aria-required="true">
</div>
</div>
<div class="col-md-4"></div>
@@ -42,7 +42,7 @@
<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" />
+ aria-required="true">
</div>
</div>
<div class="field text col-md-4">
@@ -51,7 +51,7 @@
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" />
+ aria-required="true">
</div>
</div>
<div class="field text col-md-4">
@@ -60,7 +60,7 @@
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" />
+ aria-required="true">
</div>
</div>
<div class="field text col-md-4">
@@ -78,7 +78,7 @@
<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" />
+ aria-required="true">
</div>
</div>
<div class="field text col-md-4">
@@ -87,7 +87,7 @@
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" />
+ aria-required="true">
</div>
</div>
<div class="field text col-md-4">
@@ -95,7 +95,7 @@
<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" />
+ aria-required="true">
</div>
</div>
<div class="field text col-md-4">
@@ -103,7 +103,7 @@
<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" />
+ aria-required="true">
</div>
</div>
<div class="field text col-md-4">
@@ -123,21 +123,21 @@
<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" />
+ <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" />
+ <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" />
+ <input type="text" class="text form-control" ng-model="ctrl.sut_version">
</div>
</div>
<div class="field text col-md-4">
@@ -145,42 +145,42 @@
<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" />
+ <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" />
+ <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" />
+ <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" />
+ <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" />
+ <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" />
+ <input type="text" class="text form-control" ng-model="ctrl.approved">
</div>
</div>
<div class="field text col-md-4">
@@ -188,7 +188,7 @@
<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" />
+ <input type="text" class="text form-control" ng-model="ctrl.test_id">
</div>
</div>
<div class="field text col-md-4">
@@ -205,22 +205,22 @@
<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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <input type="text" class="text form-control" ng-model="ctrl.lab_phone">
</div>
</div>
</fieldset>
diff --git a/3rd_party/static/testapi-ui/components/auth/authPortal.html b/3rd_party/static/testapi-ui/components/auth/authPortal.html
index 86d3d35..f3aab41 100644
--- a/3rd_party/static/testapi-ui/components/auth/authPortal.html
+++ b/3rd_party/static/testapi-ui/components/auth/authPortal.html
@@ -1,5 +1,5 @@
<h3>Sign In</h3>
-<b>Please choose your account provider:</b>
+<strong>Please choose your account provider:</strong>
<div class="row">
<div class="col-xs-6 col-md-3">
<a ng-click="auth.doSignIn('cas')" class="thumbnail">
diff --git a/3rd_party/static/testapi-ui/components/directory/directory.html b/3rd_party/static/testapi-ui/components/directory/directory.html
index 535110e..3be13d4 100644
--- a/3rd_party/static/testapi-ui/components/directory/directory.html
+++ b/3rd_party/static/testapi-ui/components/directory/directory.html
@@ -2,7 +2,7 @@
<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}}" />
+ <img src="api/v1/cvp/applications/getlogo/{{ctrl.company_logo}}" alt="Company Logo">
<table class="table table-striped table-hover">
<thead>
<tr>
@@ -18,13 +18,13 @@
<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 style="width: 250px;">{{ prod.product_name}}</td>
+ <td style="width: 350px;">{{ prod.description}}</td>
+ <td style="width: 150px;">{{ prod.ovp_category}}</td>
+ <td style="width: 150px;">{{ 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>
+ <td style="width: 150px;">{{ prod.sut_version}}</td>
+ <td style="width: 150px;">{{ prod.sut_hw_version}}</td>
</tr>
</tbody>
</table>
diff --git a/3rd_party/static/testapi-ui/components/guidelines/guidelines.html b/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
index 5cf3cbd..1cd2b51 100644
--- a/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
+++ b/3rd_party/static/testapi-ui/components/guidelines/guidelines.html
@@ -13,7 +13,7 @@
</div>
</div>
-<br />
+<br>
<strong>Capability Status:</strong>
<div class="checkbox">
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 bf65a38..385fafe 100644
--- a/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html
+++ b/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html
@@ -9,9 +9,9 @@ variable 'guidelines'.
<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 />
+ <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">
@@ -29,8 +29,8 @@ variable 'guidelines'.
<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 />
+ <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">
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 8e4a37d..0b572c5 100644
--- a/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html
+++ b/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html
@@ -3,9 +3,9 @@
<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:
+ <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>
diff --git a/3rd_party/static/testapi-ui/components/home/home.html b/3rd_party/static/testapi-ui/components/home/home.html
index fd5ca36..1c5eeed 100644
--- a/3rd_party/static/testapi-ui/components/home/home.html
+++ b/3rd_party/static/testapi-ui/components/home/home.html
@@ -14,37 +14,37 @@
<div class="panel-body">
<div>
<a href="https://www.opnfv.org/verified"
- target="_blank">Overview&nbsp;>
+ 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;>
+ 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 &amp; Conditions&nbsp;>
+ target="_blank">Terms &amp; 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;>
+ 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;>
+ 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;>
+ target="_blank">OPNFV Verified Brand Guidelines&nbsp;
<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
</a>
</div>
@@ -63,37 +63,37 @@
<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;>
+ 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;>
+ 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;>
+ 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;>
+ 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;>
+ 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;>
+ target="_blank">Guidelines Addendum&nbsp;
<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
</a>
</div>
@@ -112,37 +112,37 @@
<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;>
+ 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;>
+ 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;>
+ 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;>
+ 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;>
+ 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;>
+ target="_blank">Guidelines Addendum&nbsp;
<span class="glyphicon glyphicon-new-window" aria-hidden="true"></span>
</a>
</div>
@@ -159,7 +159,7 @@
</div>
<div class="home-content">
<div class="col-md-2">
- <img class="home-content-img" src="testapi-ui/assets/img/icon.png" />
+ <img class="home-content-img" src="testapi-ui/assets/img/icon.png" alt="OPNFV">
</div>
<div class="col-md-10">
<p class="home-content-text" style="padding-bottom: 40px;">
@@ -198,13 +198,13 @@
<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}}" />
+ <td style="width: 400px;">
+ <img class="company_logo" ng-src="api/v1/cvp/applications/getlogo/{{app.company_logo}}" alt="OPNFV">
{{ 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>
+ <td style="width: 300px;">{{ app.product_name}}</td>
+ <td style="width: 150px;">{{ app.ovp_category}}</td>
+ <td style="width: 150px;">{{ app.ovp_version}}</td>
</tr>
</tbody>
</table>
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 9a147f4..d9758fe 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
@@ -12,14 +12,14 @@
<option value="true">Yes</option>
<option value="">No</option>
</select>
- <br />
+ <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 />
+ <br>
<strong>Associated Target Program:</strong>
<select ng-model="modal.metaCopy.target"
class="form-control">
@@ -28,7 +28,7 @@
<option value="compute">OpenStack Powered Compute</option>
<option value="object">OpenStack Powered Object Storage</option>
</select>
- <hr />
+ <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"
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 d58f1be..3f3e9c9 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
@@ -3,22 +3,22 @@ HTML for each accordion group that separates the status types on the results
report page.
-->
-Test Filters:<br />
+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">
+ <input type="radio" ng-model="ctrl.testStatus" value="total" name="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">
+ <input type="radio" ng-model="ctrl.testStatus" value="passed" name="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">
+ <input type="radio" ng-model="ctrl.testStatus" value="not passed" name="not passed">
<span class="text-danger">Not Passed</span>
</label>
</div>
@@ -35,10 +35,14 @@ Test Filters:<br />
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'">
+ <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 == '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>
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 576f23e..0d85875 100644
--- a/3rd_party/static/testapi-ui/components/results-report/resultsReport.html
+++ b/3rd_party/static/testapi-ui/components/results-report/resultsReport.html
@@ -5,21 +5,21 @@
<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 />
+ <strong>OVP version:</strong> {{ctrl.version}}<br>
+ <strong>Test ID:</strong> {{ctrl.testId}}<br>
</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 />
+ <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>{{ ctrl.validation }}</strong><br>
<div>
- <hr />
+ <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. -->
@@ -27,7 +27,7 @@
src="ctrl.detailsTemplate"
onload="isOpen = true">
</ng-include>
- <br />
+ <br>
</uib-accordion>
</div>
</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 5717b54..021a355 100644
--- a/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html
+++ b/3rd_party/static/testapi-ui/components/results/modal/sharedModal.html
@@ -1,6 +1,6 @@
<div>
<h4>Enter user name or email</h4>
- <input type="text" ng-model="ctrl.userName" />
+ <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>
diff --git a/3rd_party/static/testapi-ui/components/results/results.html b/3rd_party/static/testapi-ui/components/results/results.html
index 913d882..bc15169 100644
--- a/3rd_party/static/testapi-ui/components/results/results.html
+++ b/3rd_party/static/testapi-ui/components/results/results.html
@@ -8,7 +8,7 @@
</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"/>
+ 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()">
@@ -107,12 +107,12 @@
</td>
<td>
<div class="btn-group" uib-dropdown>
- <a id="single-button" type="button"
+ <a id="single-button-two" 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"
+ <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button-two"
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">
diff --git a/3rd_party/static/testapi-ui/components/sut/sut.html b/3rd_party/static/testapi-ui/components/sut/sut.html
index ec6b20c..f707662 100644
--- a/3rd_party/static/testapi-ui/components/sut/sut.html
+++ b/3rd_party/static/testapi-ui/components/sut/sut.html
@@ -1,7 +1,8 @@
<!DOCTYPE html>
<head>
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- <link rel="stylesheet" href="testapi-ui/assets/css/combine.css" />
+ <title>OVP</title>
+ <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">
diff --git a/3rd_party/static/testapi-ui/index.html b/3rd_party/static/testapi-ui/index.html
index 22a2525..f42166a 100644
--- a/3rd_party/static/testapi-ui/index.html
+++ b/3rd_party/static/testapi-ui/index.html
@@ -1,18 +1,18 @@
<!DOCTYPE html>
<!--
- Copyright (c) 2015 IBM Corp.
+ Copyright (c) 2015 IBM Corp.
- Licensed under the Apache License, Version 2.0 (the "License"); you may
- not use this file except in compliance with the License. You may obtain
- a copy of the License at
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- License for the specific language governing permissions and limitations
- under the License.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
-->
<html id="ng-app">
<head>
@@ -21,22 +21,22 @@
<meta name="viewport" content="width=device-width">
<title>OVP</title>
- <link rel="icon" type="image/png" href="testapi-ui/favicon.ico" sizes="16x16" />
- <link rel="icon" type="image/png" href="testapi-ui/favicon.ico" sizes="32x32" />
+ <link rel="icon" type="image/png" href="testapi-ui/favicon.ico" sizes="16x16">
+ <link rel="icon" type="image/png" href="testapi-ui/favicon.ico" sizes="32x32">
<!-- CSS Libraries -->
- <link rel="stylesheet" href="testapi-ui/node_modules/bootstrap/dist/css/bootstrap.min.css" />
- <link rel="stylesheet" href="testapi-ui/node_modules/angular-busy/dist/angular-busy.min.css" />
- <link rel="stylesheet" href="testapi-ui/node_modules/ng-dialog/css/ngDialog.min.css" />
- <link rel="stylesheet" href="testapi-ui/node_modules/ng-dialog/css/ngDialog-theme-default.min.css" />
- <link rel="stylesheet" href="testapi-ui/node_modules/angular-xeditable/dist/css/xeditable.min.css" />
+ <link rel="stylesheet" href="testapi-ui/node_modules/bootstrap/dist/css/bootstrap.min.css">
+ <link rel="stylesheet" href="testapi-ui/node_modules/angular-busy/dist/angular-busy.min.css">
+ <link rel="stylesheet" href="testapi-ui/node_modules/ng-dialog/css/ngDialog.min.css">
+ <link rel="stylesheet" href="testapi-ui/node_modules/ng-dialog/css/ngDialog-theme-default.min.css">
+ <link rel="stylesheet" href="testapi-ui/node_modules/angular-xeditable/dist/css/xeditable.min.css">
<!-- CSS Internal Code -->
- <link rel="stylesheet" href="testapi-ui/assets/css/cvp-style.css" />
- <link rel="stylesheet" href="testapi-ui/assets/css/ascend.css" />
- <link rel="stylesheet" href="testapi-ui/assets/css/index.css" />
- <link rel="stylesheet" href="testapi-ui/assets/css/header.css" />
- <link rel="stylesheet" href="testapi-ui/assets/css/home/home.css" />
+ <link rel="stylesheet" href="testapi-ui/assets/css/cvp-style.css">
+ <link rel="stylesheet" href="testapi-ui/assets/css/ascend.css">
+ <link rel="stylesheet" href="testapi-ui/assets/css/index.css">
+ <link rel="stylesheet" href="testapi-ui/assets/css/header.css">
+ <link rel="stylesheet" href="testapi-ui/assets/css/home/home.css">
<!-- JS Libraries -->
<script src="testapi-ui/node_modules/jquery/dist/jquery.min.js"></script>
diff --git a/3rd_party/static/testapi-ui/shared/header/header.html b/3rd_party/static/testapi-ui/shared/header/header.html
index f0ede3a..7a12cc7 100644
--- a/3rd_party/static/testapi-ui/shared/header/header.html
+++ b/3rd_party/static/testapi-ui/shared/header/header.html
@@ -1,8 +1,8 @@
<div class="header-container-1">
<div class="row header-container-row">
<div class="col-md-3">
- <a href="/#/" >
- <img class="stnd dark-version header-logo" alt="OPNFV" src="testapi-ui/assets/img/logo.png" />
+ <a href="/#/">
+ <img class="stnd dark-version header-logo" alt="OPNFV" src="testapi-ui/assets/img/logo.png">
</a>
</div>
<div class="col-md-offset-1 header-title">
diff --git a/node-requirements.txt b/node-requirements.txt
new file mode 100644
index 0000000..69473dc
--- /dev/null
+++ b/node-requirements.txt
@@ -0,0 +1,2 @@
+htmllint-cli
+csslint
diff --git a/tox.ini b/tox.ini
index 6b1fb5d..404e32e 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,7 +4,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = pep8,py27
+envlist = weblint,pep8,py27
skipsdist = True
sitepackages = True
@@ -18,7 +18,7 @@ deps =
commands=
py.test \
--basetemp={envtmpdir} \
- --cov \
+ --cov=opnfv_testapi \
--cov-report term-missing \
--cov-report xml \
{posargs}
@@ -26,9 +26,18 @@ setenv=
HOME = {envtmpdir}
PYTHONPATH = {toxinidir}
+[testenv:weblint]
+deps = nodeenv
+commands =
+ nodeenv --force -r node-requirements.txt {envdir}/npmenv
+ bash -c 'ln -f -s {envdir}/npmenv/bin/node {envdir}/bin/node'
+ {envdir}/npmenv/bin/htmllint --cwd {toxinidir}/3rd_party/
+ {envdir}/npmenv/bin/csslint {toxinidir}/3rd_party/
+whitelist_externals = bash
+
[testenv:pep8]
deps = flake8
-commands = flake8 {toxinidir}
+commands = flake8 opnfv_testapi
[flake8]
# H803 skipped on purpose per list discussion.