Merge lp:~canonical-platform-qa/qakit/initial-dashboard into lp:qakit

Proposed by Sergio Cazzolato
Status: Superseded
Proposed branch: lp:~canonical-platform-qa/qakit/initial-dashboard
Merge into: lp:qakit
Diff against target: 2211 lines (+2113/-0)
16 files modified
qakit/dashboard/css/demo.css (+136/-0)
qakit/dashboard/css/kpi.css (+32/-0)
qakit/dashboard/css/sidebar-advanced.css (+241/-0)
qakit/dashboard/css/sidebar-basic.css (+124/-0)
qakit/dashboard/css/sidebar-collapse.css (+264/-0)
qakit/dashboard/css/sidebar-left.css (+179/-0)
qakit/dashboard/css/sidebar-light.css (+124/-0)
qakit/dashboard/images/logo_ubuntu.svg (+5/-0)
qakit/dashboard/index.html (+343/-0)
qakit/dashboard/js/kpi.js (+76/-0)
qakit/dashboard/js/landing-failures.js (+30/-0)
qakit/dashboard/js/landings.js (+113/-0)
qakit/dashboard/js/test-execution.js (+195/-0)
qakit/dashboard/js/test-library.js (+144/-0)
qakit/dashboard/js/test-plans.js (+54/-0)
qakit/dashboard/tabs.html (+53/-0)
To merge this branch: bzr merge lp:~canonical-platform-qa/qakit/initial-dashboard
Reviewer Review Type Date Requested Status
Canonical Platform QA Team Pending
Review via email: mp+285804@code.launchpad.net

This proposal has been superseded by a proposal from 2016-02-11.

Commit message

Dashboard including appstartup section

To post a comment you must log in.
52. By Sergio Cazzolato

Adding missing files

53. By Sergio Cazzolato

Adding new info to the appstartup graph

54. By Sergio Cazzolato

Merge from trunk

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'qakit/dashboard'
2=== added directory 'qakit/dashboard/css'
3=== added file 'qakit/dashboard/css/demo.css'
4--- qakit/dashboard/css/demo.css 1970-01-01 00:00:00 +0000
5+++ qakit/dashboard/css/demo.css 2016-02-11 21:28:26 +0000
6@@ -0,0 +1,136 @@
7+@import url('http://fonts.googleapis.com/css?family=Open+Sans:400,700');
8+
9+html{
10+ background-color: #fff;
11+}
12+
13+body{
14+ font:14px/1.5 Arial, Helvetica, sans-serif;
15+ padding:0;
16+ margin:0;
17+}
18+
19+.menu{
20+ text-align: left;
21+ padding-top: 25px;
22+ margin-bottom:200px;
23+}
24+
25+.menu .arrow{
26+ opacity: 0.4;
27+}
28+
29+.arrow.up,
30+.arrow.down{
31+ display: none;
32+ margin: 20px 0;
33+}
34+
35+.menu h1{
36+ margin-top:0;
37+ font: normal 32px/1.5 'Open Sans', sans-serif;
38+ color: #3F71AE;
39+ padding-bottom: 16px;
40+}
41+
42+.menu h2{
43+ color: #F05283;
44+}
45+
46+.menu h2 a{
47+ color:inherit;
48+ text-decoration: none;
49+ display: inline-block;
50+ border: 1px solid #F05283;
51+ padding: 10px 15px;
52+ border-radius: 3px;
53+ font: bold 14px/1 'Open Sans', sans-serif;
54+ text-transform: uppercase;
55+}
56+
57+.menu h2 a:hover{
58+ background-color:#F05283;
59+ transition:0.2s;
60+ color:#fff;
61+}
62+
63+.menu ul {
64+ margin: 60px auto 0;
65+}
66+
67+.menu ul a{
68+ text-decoration: none;
69+ color: #FFF;
70+ text-align: left;
71+ background-color: #B9C1CA;
72+ padding: 10px 16px;
73+ border-radius: 2px;
74+ opacity: 0.8;
75+ font-size: 16px;
76+ display: inline-block;
77+ margin: 4px;
78+ line-height: 1;
79+ outline: none;
80+
81+ transition: 0.2s ease;
82+}
83+
84+.menu ul li a.active{
85+ background-color: #66B650;
86+ pointer-events: none;
87+}
88+
89+.menu ul li a:hover {
90+ opacity: 1;
91+}
92+
93+.menu ul{
94+ list-style: none;
95+ padding: 0;
96+}
97+
98+.menu ul li{
99+ display: inline-block;
100+}
101+
102+@media (max-height:800px){
103+}
104+
105+@media (max-width: 900px) {
106+
107+ .menu {
108+ padding-top:40px;
109+ margin-bottom: 80px;
110+ }
111+
112+ .arrow.left,
113+ .arrow.right{
114+ display: none;
115+ }
116+
117+ .arrow.up,
118+ .arrow.down{
119+ display: inline-block;
120+ }
121+
122+}
123+
124+
125+
126+/* -- Demo ads -- */
127+
128+@media (max-width: 1200px) {
129+ #bsaHolder{ display:none;}
130+}
131+
132+/* -- Link to Tutorialzine -- */
133+
134+.tz-link{
135+ text-decoration: none;
136+ color: #fff !important;
137+ font: bold 36px Arial,Helvetica,sans-serif !important;
138+}
139+
140+.tz-link span{
141+ color: #da431c;
142+}
143
144=== added file 'qakit/dashboard/css/kpi.css'
145--- qakit/dashboard/css/kpi.css 1970-01-01 00:00:00 +0000
146+++ qakit/dashboard/css/kpi.css 2016-02-11 21:28:26 +0000
147@@ -0,0 +1,32 @@
148+
149+.line-legend {
150+ position: absolute;
151+ width: 100%;
152+}
153+
154+.line-legend ul {
155+ padding-left: 20px;
156+ list-style: none;
157+ display: inline-block;
158+ width: inherit;
159+}
160+
161+.line-legend li {
162+ display: inline-block;
163+ font-size: 10px;
164+ padding: 5px;
165+}
166+
167+.line-legend li span {
168+ float: left;
169+ color: red !important;
170+ display: block;
171+ width: 8px;
172+ height: 9px;
173+ margin-right: 5px;
174+ list-style-type: none !important;
175+}
176+
177+.app-startup-elem {
178+ text-align: center;
179+}
180
181=== added file 'qakit/dashboard/css/sidebar-advanced.css'
182--- qakit/dashboard/css/sidebar-advanced.css 1970-01-01 00:00:00 +0000
183+++ qakit/dashboard/css/sidebar-advanced.css 2016-02-11 21:28:26 +0000
184@@ -0,0 +1,241 @@
185+/* Giving the page a width */
186+
187+.page-layout {
188+ max-width: 960px;
189+ padding: 0 20px;
190+ margin: 0 auto;
191+ overflow: hidden;
192+ box-sizing: border-box;
193+
194+ display: -webkit-flex;
195+ display: flex;
196+
197+ justify-content: space-between;
198+}
199+
200+/* The main content */
201+
202+.main-content {
203+ font-family: Arial, Helvetica, sans-serif;
204+ max-width: 500px;
205+ padding-top: 40px;
206+ margin-bottom: 40px;
207+}
208+
209+/* The advanced sidebar */
210+
211+.sidebar-advanced {
212+ font-family: Arial, Helvetica, sans-serif;
213+ background-color: #292c2f;
214+ width: 280px;
215+}
216+
217+.sidebar-advanced .company-info {
218+ background-color: #292c2f;
219+ padding: 35px 0;
220+}
221+
222+.sidebar-advanced .company-info h2 {
223+ color: #ffffff;
224+ font-size: 18px;
225+ margin: 0 0 25px;
226+ padding: 0 40px;
227+}
228+
229+.sidebar-advanced .company-info p {
230+ color: #abb0b5;
231+ font-size: 13px;
232+ line-height: 1.3;
233+ margin-bottom: 30px;
234+ padding: 0 40px;
235+}
236+
237+.sidebar-advanced .social-buttons {
238+ padding: 0 40px;
239+}
240+
241+.sidebar-advanced .social-buttons .fa {
242+ border-radius: 2px;
243+ font-size: 20px;
244+ color: #ffffff;
245+ text-align: center;
246+ line-height: 1.7;
247+ background-color: #33383b;
248+ width: 34px;
249+ height: 34px;
250+}
251+
252+.sidebar-advanced .latest-blog-posts,
253+.sidebar-advanced .our-newsletter,
254+.sidebar-advanced .photo-stream {
255+ background-color: #292c2f;
256+}
257+
258+.sidebar-advanced h3 {
259+ background-color: #2f5377;
260+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);
261+ padding: 20px 30px;
262+ text-align: left;
263+ color: #ffffff;
264+ font-size: 16px;
265+ font-weight: bold;
266+ margin: 0;
267+}
268+
269+.sidebar-advanced h3 .fa {
270+ margin-right: 15px;
271+}
272+
273+/* Latest Blog Posts */
274+
275+.sidebar-advanced .latest-blog-posts ul {
276+ list-style: none;
277+ margin: 0;
278+ text-align: left;
279+ padding: 30px 40px;
280+}
281+
282+.sidebar-advanced .latest-blog-posts ul li {
283+ line-height: 1.2;
284+ margin: 0 0 14px;
285+}
286+
287+.sidebar-advanced .latest-blog-posts ul li a {
288+ font-size: 13px;
289+ text-decoration: none;
290+ font-weight: bold;
291+ color: #fff;
292+}
293+
294+.sidebar-advanced .latest-blog-posts ul li span {
295+ color: #92999F;
296+ font-size: 11px;
297+ display: block;
298+ margin-top:4px;
299+}
300+
301+/* Our newsletter */
302+
303+.sidebar-advanced .our-newsletter form {
304+ padding: 30px 40px;
305+}
306+
307+.sidebar-advanced .our-newsletter form p {
308+ color: #ffffff;
309+ font-size: 13px;
310+ font-weight: bold;
311+ line-height: 19px;
312+ margin:0 0 25px;
313+}
314+
315+.sidebar-advanced .our-newsletter form input[type=email] {
316+ border-radius: 2px;
317+ background-color: #3e4144;
318+ width: 170px;
319+ height: 39px;
320+ margin-bottom: 15px;
321+ margin-right: 8px;
322+ color: #eee;
323+ padding: 0 15px;
324+ outline: 0;
325+ border: none;
326+}
327+
328+.sidebar-advanced .our-newsletter form button {
329+ border-radius: 2px;
330+ background-color: #2F7756;
331+ padding: 13px 16px;
332+ outline: 0;
333+ border: none;
334+ color: #FFF;
335+ font-size: 13px;
336+ font-weight: bold;
337+ line-height: 1;
338+ cursor: pointer;
339+}
340+
341+/* Photo Stream */
342+
343+.sidebar-advanced .photo-stream .gallery {
344+ padding: 35px 40px;
345+ text-align: center;
346+}
347+
348+.sidebar-advanced .photo-stream .gallery img {
349+ width: 200px;
350+ margin-bottom: 20px;
351+}
352+
353+.sidebar-advanced .pagination {
354+ text-align: right;
355+ width: 200px;
356+ margin: 0 auto;
357+ white-space: nowrap;
358+}
359+
360+.sidebar-advanced .pagination span {
361+ float: left;
362+ color: #FFE;
363+ font-size: 13px;
364+ font-weight: bold;
365+ line-height: 36px;
366+}
367+
368+.sidebar-advanced .pagination .previous,
369+.sidebar-advanced .pagination .next {
370+ display: inline-block;
371+ position: relative;
372+ border-radius: 2px;
373+ background-color: #33383b;
374+ width: 34px;
375+ height: 34px;
376+}
377+
378+.sidebar-advanced .pagination .previous:after,
379+.sidebar-advanced .pagination .next:after {
380+ content: '';
381+ position: absolute;
382+ top: 12px;
383+ left: 14px;
384+ width: 0;
385+ height: 0;
386+ border-top: 5px solid transparent;
387+ border-bottom: 5px solid transparent;
388+}
389+
390+.sidebar-advanced .pagination .previous:after {
391+ border-right: 7px solid #ffffff;
392+}
393+
394+.sidebar-advanced .pagination .next:after {
395+ border-left: 7px solid #ffffff;
396+}
397+
398+/* Making the sidebar responsive */
399+
400+@media (max-width: 900px) {
401+
402+ .page-layout{
403+ flex-flow:column;
404+ }
405+
406+ .main-content{
407+ max-width:none;
408+ }
409+
410+ .sidebar-advanced {
411+ width: auto;
412+ }
413+
414+ .sidebar-advanced .photo-stream {
415+ display: none;
416+ }
417+}
418+
419+/* Removing margins and paddings from the body, so that
420+ the sidebar takes the full height of the page */
421+
422+body{
423+ margin: 0;
424+ padding: 0;
425+}
426\ No newline at end of file
427
428=== added file 'qakit/dashboard/css/sidebar-basic.css'
429--- qakit/dashboard/css/sidebar-basic.css 1970-01-01 00:00:00 +0000
430+++ qakit/dashboard/css/sidebar-basic.css 2016-02-11 21:28:26 +0000
431@@ -0,0 +1,124 @@
432+/* Giving the page a width */
433+
434+section {
435+ max-width: 960px;
436+ padding:0 20px;
437+ margin: 0 auto;
438+ overflow: hidden;
439+ box-sizing: border-box;
440+}
441+
442+/* The main content */
443+
444+.main-content {
445+ font-family: Arial, Helvetica, sans-serif;
446+ width: 520px;
447+ float: left;
448+}
449+
450+/* The sidebar */
451+
452+.sidebar-basic {
453+ font-family: Arial, Helvetica, sans-serif;
454+ float: right;
455+ width: 280px;
456+}
457+
458+.sidebar-basic .company-info {
459+ background-color: #292c2f;
460+ margin-bottom: 30px;
461+ padding: 35px 0;
462+}
463+
464+.sidebar-basic .company-info h3 {
465+ color: #ffffff;
466+ font-size: 18px;
467+ font-weight: bold;
468+ margin: 0 0 25px;
469+ padding: 0 40px;
470+}
471+
472+.sidebar-basic .company-info p {
473+ color: #ABB0B5;
474+ font-size: 13px;
475+ line-height: 19px;
476+ margin: 0 0 30px;
477+ padding: 0 40px;
478+}
479+
480+.sidebar-basic .company-info .social-buttons {
481+ padding: 0 40px;
482+}
483+
484+.sidebar-basic .company-info .social-buttons .fa {
485+ border-radius: 2px;
486+ font-size: 20px;
487+ color: #ffffff;
488+ text-align: center;
489+ line-height: 1.7;
490+ background-color: #33383b;
491+ width: 34px;
492+ height: 34px;
493+}
494+
495+.sidebar-basic .latest-blog-posts {
496+ background-color: #292c2f;
497+}
498+
499+.sidebar-basic .latest-blog-posts h3 {
500+ background-color: #2f5377;
501+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);
502+ padding: 20px 30px;
503+ text-align: left;
504+ color: #ffffff;
505+ font-size: 16px;
506+ font-weight: bold;
507+ margin: 0;
508+}
509+
510+.sidebar-basic .latest-blog-posts .element-title .fa {
511+ margin-right: 15px;
512+}
513+
514+.sidebar-basic .latest-blog-posts ul {
515+ list-style: none;
516+ margin: 0;
517+ text-align: left;
518+ padding: 30px 40px;
519+}
520+
521+.sidebar-basic .latest-blog-posts ul li {
522+ line-height: 1.2;
523+ margin: 0 0 14px;
524+}
525+
526+.sidebar-basic .latest-blog-posts ul li a {
527+ font-size: 13px;
528+ text-decoration: none;
529+ font-weight: bold;
530+ color: #ffffff;
531+}
532+
533+.sidebar-basic .latest-blog-posts ul li span {
534+ color: #92999f;
535+ font-size: 11px;
536+ display: block;
537+ margin-top:4px;
538+}
539+
540+/* Making the sidebar responsive */
541+
542+@media (max-width: 900px) {
543+
544+ .main-content {
545+ float:none;
546+ width: auto;
547+ margin-bottom: 40px;
548+ }
549+
550+ .sidebar-basic {
551+ float: none;
552+ width: auto;
553+ }
554+
555+}
556\ No newline at end of file
557
558=== added file 'qakit/dashboard/css/sidebar-collapse.css'
559--- qakit/dashboard/css/sidebar-collapse.css 1970-01-01 00:00:00 +0000
560+++ qakit/dashboard/css/sidebar-collapse.css 2016-02-11 21:28:26 +0000
561@@ -0,0 +1,264 @@
562+/* The main content */
563+
564+.main-content {
565+ font-family: Ubuntu, Arial, Helvetica, sans-serif;
566+ eadding-top: 40px;
567+ max-width: 80%;
568+ margin: 0 0 40px 260px;
569+}
570+
571+
572+/* The left-collapsing sidebar */
573+
574+.sidebar-left-collapse {
575+ font-family: Ubuntu, Arial, Helvetica, sans-serif;
576+ position: fixed;
577+ top: 0;
578+ left: 0;
579+ /*background-color: #292c2f;*/
580+ background-color: #2c001e;
581+ width: 180px;
582+ height: 100%;
583+ padding: 20px 0;
584+}
585+
586+.sidebar-left-collapse > a {
587+ display: block;
588+ text-decoration: none;
589+ font-family: Ubuntu, cursive;
590+ width: 122px;
591+ height: 62px;
592+ margin: 0 auto;
593+ text-align: left;
594+ color: #ffffff;
595+ font-size: 32px;
596+ font-weight: normal;
597+ line-height: 2.6;
598+ background-image: url("../images/logo_ubuntu.svg");
599+ background-size: 24px 24px;
600+ background-repeat: no-repeat;
601+ background-position: center right;
602+}
603+
604+.sidebar-left-collapse .sidebar-links {
605+ margin: 30px auto;
606+}
607+
608+.sidebar-links div > a {
609+ display: block;
610+ text-decoration: none;
611+ margin: 0 auto 5px auto;
612+ padding: 10px 0 10px 5px;
613+ /*background-color: #35393e;*/
614+ background-color: #5e2750;
615+ text-align: left;
616+ color: #b3bcc5;
617+ font-size: 12px;
618+ font-weight: bold;
619+ line-height: 2;
620+ border-left-width: 2px;
621+ border-left-style: solid;
622+}
623+
624+.sidebar-links div.selected > a{
625+ background-color: #ffffff;
626+ color: #565d63;
627+ line-height: 2.3;
628+ margin: 0;
629+}
630+
631+.sidebar-links div > a i.fa {
632+ position: relative;
633+ font-size: 20px;
634+ top: 3px;
635+ width: 40px;
636+ text-align: center;
637+}
638+
639+.sidebar-links div ul.sub-links {
640+ max-height: 0;
641+ overflow: hidden;
642+ list-style: none;
643+ padding: 0 0 0 30px;
644+ color: #b3bcc5;
645+ font-size: 12px;
646+ font-weight: bold;
647+ line-height: 24px;
648+ margin: 0;
649+ transition: 0.4s;
650+}
651+
652+.sidebar-links div.selected ul.sub-links {
653+ max-height: 500px;
654+ padding: 12px 0 12px 30px;
655+}
656+
657+.sidebar-links div .sub-links a {
658+ text-decoration: none;
659+ color: #b3bcc5;
660+ display: block;
661+ text-align: left;
662+}
663+
664+/* Link Colors */
665+
666+.sidebar-links div.link-blue > a {
667+ border-color: #487db2;
668+}
669+
670+.sidebar-links div.link-blue > a i.fa {
671+ color: #487db2;
672+}
673+
674+.sidebar-links div.link-red > a {
675+ border-color: #da4545;
676+}
677+
678+.sidebar-links div.link-red > a i.fa {
679+ color: #da4545;
680+}
681+
682+.sidebar-links div.link-yellow > a {
683+ border-color: #d0d237;
684+}
685+
686+.sidebar-links div.link-yellow > a i.fa {
687+ color: #d0d237;
688+}
689+
690+.sidebar-links div.link-green > a {
691+ border-color: #86be2e;
692+}
693+
694+.sidebar-links div.link-green > a i.fa {
695+ color: #86be2e;
696+}
697+
698+.sidebar-links div.link-orange > a {
699+ border-color: #dd4814;
700+}
701+
702+.sidebar-links div.link-orange > a i.fa {
703+ color: #dd4814;
704+}
705+
706+/* Making the sidebar responsive */
707+
708+@media (max-width: 900px) {
709+
710+ .main-content{
711+ max-width: none;
712+ padding: 70px 20px;
713+ margin: 0 0 40px;
714+ }
715+
716+ .sidebar-left-collapse {
717+ width: auto;
718+ height: auto;
719+ position: static;
720+ padding: 20px 0 0;
721+ }
722+
723+ .sidebar-left-collapse .sidebar-links {
724+ text-align: center;
725+ margin: 20px auto 0;
726+ }
727+
728+ .sidebar-links div {
729+ display: inline-block;
730+ width: 100px;
731+ }
732+
733+ .sidebar-links div > a {
734+ text-align: center;
735+ margin: 0;
736+ padding: 10px 0;
737+ border-left: none;
738+ border-top-width: 2px;
739+ border-top-style: solid;
740+ }
741+
742+ .sidebar-links div > a i.fa {
743+ display: block;
744+ margin: 0 auto 5px;
745+ }
746+
747+ .sidebar-links div ul.sub-links {
748+ display: none;
749+ }
750+
751+ .sidebar-links div.selected .sub-links {
752+ display: block;
753+ position: absolute;
754+ text-align: center;
755+ width: auto;
756+ left: 0;
757+ right: 0;
758+ }
759+
760+ .sidebar-links div.selected .sub-links li {
761+ display: inline-block;
762+ }
763+
764+ .sidebar-links div.selected .sub-links a {
765+ display: inline-block;
766+ margin-right: 20px;
767+ font-size: 13px;
768+ color: #748290;
769+ }
770+
771+}
772+
773+/* Smartphone version */
774+
775+@media (max-width: 450px) {
776+
777+ .main-content{
778+ padding: 90px 20px;
779+ }
780+
781+ .sidebar-left-collapse {
782+ padding: 20px 0;
783+ }
784+
785+ .sidebar-left-collapse .sidebar-links {
786+ text-align: center;
787+ margin: 20px auto 0;
788+ position: relative;
789+ }
790+
791+ .sidebar-links div {
792+ display: block;
793+ width: 240px;
794+ margin: 0 auto 5px;
795+ }
796+
797+ .sidebar-links div > a {
798+ text-align: left;
799+ padding: 10px 25px;
800+ vertical-align: middle;
801+ border-top: none;
802+ border-left-width: 2px;
803+ border-left-style: solid;
804+ }
805+
806+ .sidebar-links div > a i.fa {
807+ display: inline-block;
808+ font-size: 20px;
809+ width: 20px;
810+ margin: 0 20px 0 0;
811+ }
812+
813+ .sidebar-links div.selected .sub-links {
814+ bottom: -90px;
815+ }
816+
817+}
818+
819+/* Removing margins and paddings from the body, so that
820+ the sidebar takes the full height of the page */
821+
822+body {
823+ margin: 0;
824+ padding: 0;
825+}
826
827=== added file 'qakit/dashboard/css/sidebar-left.css'
828--- qakit/dashboard/css/sidebar-left.css 1970-01-01 00:00:00 +0000
829+++ qakit/dashboard/css/sidebar-left.css 2016-02-11 21:28:26 +0000
830@@ -0,0 +1,179 @@
831+/* The main content */
832+
833+.main-content {
834+ font-family: Arial, Helvetica, sans-serif;
835+ max-width: 600px;
836+ padding-top: 40px;
837+ margin: 0 0 40px 210px;
838+}
839+
840+
841+/* The left sidebar */
842+
843+.sidebar-left {
844+ font-family: Arial, Helvetica, sans-serif;
845+ position: fixed;
846+ top: 0;
847+ left: 0;
848+ background-color: #292c2f;
849+ width: 120px;
850+ height: 100%;
851+ padding: 20px 0;
852+}
853+
854+.sidebar-left a.company-logo {
855+ display: block;
856+ text-decoration: none;
857+ font-family: Cookie, cursive;
858+ width: 76px;
859+ height: 76px;
860+ margin: 0 auto;
861+ padding: 0;
862+ text-align: center;
863+ color: #ffffff;
864+ font-size: 28px;
865+ font-weight: normal;
866+ line-height: 2.6;
867+ border-radius: 50%;
868+ background-color: #181a1b;
869+}
870+
871+.sidebar-left .sidebar-links {
872+ margin: 20px auto;
873+}
874+
875+.sidebar-left .sidebar-links a {
876+ display: block;
877+ text-decoration: none;
878+ margin: 0 auto 5px auto;
879+ padding: 20px 0;
880+ background-color: #35393e;
881+ text-align: center;
882+ color: #b3bcc5;
883+ font-size: 12px;
884+ font-weight: bold;
885+ border-left-width: 2px;
886+ border-left-style: solid;
887+}
888+
889+.sidebar-left .sidebar-links a i.fa {
890+ display: block;
891+ font-size: 35px;
892+ margin-bottom: 5px;
893+}
894+
895+.sidebar-left .sidebar-links a.selected{
896+ background-color: #ffffff;
897+ color: #7c8085;
898+ font-size: 12px;
899+ font-weight: bold;
900+ cursor: default;
901+}
902+
903+/* Link Colors */
904+
905+.sidebar-left .sidebar-links a.link-blue {
906+ border-color: #487db2;
907+}
908+.sidebar-left .sidebar-links a.link-blue i.fa {
909+ color: #487db2;
910+}
911+
912+.sidebar-left .sidebar-links a.link-red {
913+ border-color: #da4545;
914+}
915+.sidebar-left .sidebar-links a.link-red i.fa {
916+ color: #da4545;
917+}
918+
919+.sidebar-left .sidebar-links a.link-yellow {
920+ border-color: #d0d237;
921+}
922+.sidebar-left .sidebar-links a.link-yellow i.fa {
923+ color: #d0d237;
924+}
925+
926+.sidebar-left .sidebar-links a.link-green {
927+ border-color: #86be2e;
928+}
929+.sidebar-left .sidebar-links a.link-green i.fa {
930+ color: #86be2e;
931+}
932+
933+/* Making the sidebar responsive */
934+
935+@media (max-width: 900px) {
936+
937+ .main-content{
938+ max-width: none;
939+ padding: 40px 20px;
940+ margin: 0 0 40px;
941+ }
942+
943+ .sidebar-left {
944+ width: auto;
945+ height: auto;
946+ position: inherit;
947+ padding: 20px 0 0;
948+ }
949+
950+ .sidebar-left .sidebar-links {
951+ text-align: center;
952+ margin: 20px auto 0;
953+ }
954+
955+ .sidebar-left .sidebar-links a {
956+ display: inline-block;
957+ width: 100px;
958+ margin: 0;
959+ padding: 14px 0;
960+ border-left: none;
961+ border-top-width: 2px;
962+ border-top-style: solid;
963+ }
964+
965+}
966+
967+/* Mobile phone layout */
968+
969+@media (max-width: 450px) {
970+
971+ .sidebar-left {
972+ padding: 20px 0;
973+ }
974+
975+ .sidebar-left .sidebar-links {
976+ text-align: center;
977+ margin: 20px auto 0;
978+ }
979+
980+ .sidebar-left .sidebar-links a {
981+ display: block;
982+ max-width: 240px;
983+ width: auto;
984+ vertical-align: middle;
985+ text-align: left;
986+ margin: 0 auto 5px;
987+ padding: 10px 25px;
988+ border-top: none;
989+ border-left-width: 2px;
990+ border-left-style: solid;
991+ }
992+
993+ .sidebar-left .sidebar-links a i.fa {
994+ display: inline-block;
995+ font-size: 20px;
996+ width: 20px;
997+ margin: 0 20px 0 0;
998+ vertical-align: middle;
999+ }
1000+
1001+}
1002+
1003+/* Removing margins and paddings from the body, so that
1004+ the sidebar takes the full height of the page */
1005+
1006+body {
1007+ margin: 0;
1008+ padding: 0;
1009+}
1010
1011=== added file 'qakit/dashboard/css/sidebar-light.css'
1012--- qakit/dashboard/css/sidebar-light.css 1970-01-01 00:00:00 +0000
1013+++ qakit/dashboard/css/sidebar-light.css 2016-02-11 21:28:26 +0000
1014@@ -0,0 +1,124 @@
1015+/* Giving the page a width */
1016+
1017+section {
1018+ max-width: 960px;
1019+ padding:0 20px;
1020+ margin: 0 auto;
1021+ overflow: hidden;
1022+ box-sizing: border-box;
1023+}
1024+
1025+/* The main content */
1026+
1027+.main-content {
1028+ font-family: Arial, Helvetica, sans-serif;
1029+ width: 520px;
1030+ float: left;
1031+}
1032+
1033+/* The sidebar */
1034+
1035+.sidebar-light {
1036+ font-family: Arial, Helvetica, sans-serif;
1037+ float: right;
1038+ width: 280px;
1039+}
1040+
1041+.sidebar-light .company-info {
1042+ background-color: #F1F4F6;
1043+ margin-bottom: 30px;
1044+ padding: 35px 0;
1045+}
1046+
1047+.sidebar-light .company-info h3 {
1048+ color: #4E5255;
1049+ font-size: 18px;
1050+ font-weight: bold;
1051+ margin: 0 0 25px;
1052+ padding: 0 40px;
1053+}
1054+
1055+.sidebar-light .company-info p {
1056+ color: #636568;
1057+ font-size: 13px;
1058+ line-height: 19px;
1059+ margin: 0 0 30px;
1060+ padding: 0 40px;
1061+}
1062+
1063+.sidebar-light .company-info .social-buttons {
1064+ padding: 0 40px;
1065+}
1066+
1067+.sidebar-light .company-info .social-buttons .fa {
1068+ border-radius: 2px;
1069+ font-size: 20px;
1070+ color: #ffffff;
1071+ text-align: center;
1072+ line-height: 1.7;
1073+ background-color: #7B858F;
1074+ width: 34px;
1075+ height: 34px;
1076+}
1077+
1078+.sidebar-light .latest-blog-posts {
1079+ background-color: #F1F4F6;
1080+}
1081+
1082+.sidebar-light .latest-blog-posts h3 {
1083+ background-color: #7B858F;
1084+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);
1085+ padding: 20px 30px;
1086+ text-align: left;
1087+ color: #ffffff;
1088+ font-size: 16px;
1089+ font-weight: bold;
1090+ margin: 0;
1091+}
1092+
1093+.sidebar-light .latest-blog-posts .element-title .fa {
1094+ margin-right: 15px;
1095+}
1096+
1097+.sidebar-light .latest-blog-posts ul {
1098+ list-style: none;
1099+ margin: 0;
1100+ text-align: left;
1101+ padding: 30px 40px;
1102+}
1103+
1104+.sidebar-light .latest-blog-posts ul li {
1105+ line-height: 1.2;
1106+ margin: 0 0 14px;
1107+}
1108+
1109+.sidebar-light .latest-blog-posts ul li a {
1110+ font-size: 13px;
1111+ text-decoration: none;
1112+ font-weight: bold;
1113+ color: #4F5255;
1114+}
1115+
1116+.sidebar-light .latest-blog-posts ul li span {
1117+ color: #92999F;
1118+ font-size: 11px;
1119+ display: block;
1120+ margin-top:4px;
1121+}
1122+
1123+/* Making the sidebar responsive */
1124+
1125+@media (max-width: 900px) {
1126+
1127+ .main-content {
1128+ float:none;
1129+ width: auto;
1130+ margin-bottom: 40px;
1131+ }
1132+
1133+ .sidebar-light {
1134+ float: none;
1135+ width: auto;
1136+ }
1137+
1138+}
1139
1140=== added directory 'qakit/dashboard/images'
1141=== added file 'qakit/dashboard/images/demo-arrow-down.png'
1142Binary files qakit/dashboard/images/demo-arrow-down.png 1970-01-01 00:00:00 +0000 and qakit/dashboard/images/demo-arrow-down.png 2016-02-11 21:28:26 +0000 differ
1143=== added file 'qakit/dashboard/images/demo-arrow-left.png'
1144Binary files qakit/dashboard/images/demo-arrow-left.png 1970-01-01 00:00:00 +0000 and qakit/dashboard/images/demo-arrow-left.png 2016-02-11 21:28:26 +0000 differ
1145=== added file 'qakit/dashboard/images/demo-arrow-right.png'
1146Binary files qakit/dashboard/images/demo-arrow-right.png 1970-01-01 00:00:00 +0000 and qakit/dashboard/images/demo-arrow-right.png 2016-02-11 21:28:26 +0000 differ
1147=== added file 'qakit/dashboard/images/demo-arrow-up.png'
1148Binary files qakit/dashboard/images/demo-arrow-up.png 1970-01-01 00:00:00 +0000 and qakit/dashboard/images/demo-arrow-up.png 2016-02-11 21:28:26 +0000 differ
1149=== added file 'qakit/dashboard/images/logo_ubuntu.svg'
1150--- qakit/dashboard/images/logo_ubuntu.svg 1970-01-01 00:00:00 +0000
1151+++ qakit/dashboard/images/logo_ubuntu.svg 2016-02-11 21:28:26 +0000
1152@@ -0,0 +1,5 @@
1153+<?xml version="1.0" encoding="utf-8"?>
1154+<svg xmlns="http://www.w3.org/2000/svg" width="285" height="285" viewBox="-142.5 -142.5 285 285" xmlns:xlink="http://www.w3.org/1999/xlink">
1155+<circle fill="#DD4814" r="141.732"/><g id="U" fill="#FFFFFF"><circle cx="-96.3772" r="18.9215"/>
1156+<path d="M-45.6059,68.395C-62.1655,57.3316-74.4844,40.4175-79.6011,20.6065-73.623,15.7354-69.8047,8.3164-69.8047,0-69.8047-8.3164-73.623-15.7354-79.6011-20.6065-74.4844-40.4175-62.1655-57.3316-45.6059-68.395L-31.7715-45.2212C-45.9824-35.2197-55.2754-18.7026-55.2754,0-55.2754,18.7026-45.9824,35.2197-31.7715,45.2212Z"/></g>
1157+<use xlink:href="#U" transform="rotate(120)"/><use xlink:href="#U" transform="rotate(240)"/></svg>
1158\ No newline at end of file
1159
1160=== added file 'qakit/dashboard/images/sahale-wa.jpg'
1161Binary files qakit/dashboard/images/sahale-wa.jpg 1970-01-01 00:00:00 +0000 and qakit/dashboard/images/sahale-wa.jpg 2016-02-11 21:28:26 +0000 differ
1162=== added file 'qakit/dashboard/images/spice.jpg'
1163Binary files qakit/dashboard/images/spice.jpg 1970-01-01 00:00:00 +0000 and qakit/dashboard/images/spice.jpg 2016-02-11 21:28:26 +0000 differ
1164=== added file 'qakit/dashboard/index.html'
1165--- qakit/dashboard/index.html 1970-01-01 00:00:00 +0000
1166+++ qakit/dashboard/index.html 2016-02-11 21:28:26 +0000
1167@@ -0,0 +1,343 @@
1168+<!DOCTYPE html>
1169+<html>
1170+<head>
1171+ <meta charset="utf-8">
1172+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
1173+ <meta name="viewport" content="width=device-width, initial-scale=1">
1174+
1175+ <title>Platform QA - Dashboard</title>
1176+
1177+ <link rel="stylesheet" href="css/demo.css">
1178+ <link rel="stylesheet" href="css/kpi.css">
1179+ <link rel="stylesheet" href="css/sidebar-collapse.css">
1180+ <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css">
1181+ <link href="http://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet" type="text/css">
1182+ <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
1183+ <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/s/bs/dt-1.10.10,b-1.1.0,fh-3.1.0,r-2.0.0/datatables.min.css"/>
1184+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
1185+ <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js"></script>
1186+ <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
1187+ <script type="text/javascript" src="https://cdn.datatables.net/s/bs/dt-1.10.10,b-1.1.0,fh-3.1.0,r-2.0.0/datatables.min.js"></script>
1188+ <script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.2.1/mustache.min.js"></script>
1189+ <script src="js/main.js"></script>
1190+ <script src="js/kpi.js"></script>
1191+ <script src="js/landings.js"></script>
1192+ <script src="js/landing-failures.js"></script>
1193+ <script src="js/test-execution.js"></script>
1194+ <script src="js/test-library.js"></script>
1195+ <script src="js/test-plans.js"></script>
1196+ <script src="js/appstartup.js"></script>
1197+
1198+<style type="text/css">
1199+ .bs-example{
1200+ margin: 20px;
1201+ }
1202+</style>
1203+</head>
1204+<body>
1205+ <aside class="sidebar-left-collapse">
1206+ <a href="#" class="company-logo">UES QA</a>
1207+ <div class="sidebar-links">
1208+ <div id="dashboard-link" class="link-orange selected">
1209+ <a href="#">
1210+ <i class="fa fa-tachometer"></i>Dashboard
1211+ </a>
1212+ <ul class="sub-links">
1213+ <li><a></a></li>
1214+ </ul>
1215+ </div>
1216+ <div id="test-metrics-link" class="link-blue">
1217+ <a>
1218+ <i class="fa fa-bar-chart"></i>Metrics
1219+ </a>
1220+ <ul class="sub-links">
1221+ <li id="test-library-link"><a href="#test-library-section">Test Library</a></li>
1222+ <li id="test-execution-link"><a href="#test-execution-section">Test Execution</a></li>
1223+ <li id="landings-link"><a href="#landings-section">Landings</a></li>
1224+ <li id="landing-failures-link"><a href="#landing-failures-section">Defects</a></li>
1225+ </ul>
1226+ </div>
1227+ <div class="link-red">
1228+ <a id="test-plans-link" href="#test-plans-section">
1229+ <i class="fa fa-list-ol"></i>Test Plans
1230+ </a>
1231+ <ul class="sub-links">
1232+ </ul>
1233+ </div>
1234+ <div id="tests-link" class="link-yellow">
1235+ <a>
1236+ <i class="fa fa-keyboard-o"></i>Tests
1237+ </a>
1238+ <ul class="sub-links">
1239+ <li id="applications-manual-link"><a href="#applications-manual-section">Manual by application</a></li>
1240+ <li id="applications-automated-link"><a href="#applications-automated-section">Automated by application</a></li>
1241+ <li id="domains-manual-link"><a href="#domains-manual-section">Manual by domain</a></li>
1242+ <li id="domains-automated-link"><a href="#domains-automated-section">Automated by domain</a></li>
1243+ </ul>
1244+ </div>
1245+ <div id="projects-link" class="link-yellow">
1246+ <a href="#">
1247+ <i class="fa fa-keyboard-o"></i>Projects
1248+ </a>
1249+ <ul class="sub-links">
1250+ <li><a href="#">Link 1</a></li>
1251+ <li><a href="#">Link 2</a></li>
1252+ <li><a href="#">Link 3</a></li>
1253+ <li><a href="#">Link 4</a></li>
1254+ </ul>
1255+ </div>
1256+ <div id="links-link" class="link-green">
1257+ <a href="#">
1258+ <i class="fa fa-book"></i>Links
1259+ </a>
1260+ <ul class="sub-links">
1261+ <li><a href="#" class="fa fa-lock">&nbsp;Link 1</a></li>
1262+ <li><a href="#">Link 2</a></li>
1263+ <li><a href="#">Link 3</a></li>
1264+ <li><a href="#">Link 4</a></li>
1265+ </ul>
1266+ </div>
1267+ <div class="link-blue" id="app-startup-link">
1268+ <a href="#app-startup-section">
1269+ <i class="fa fa-tachometer"></i>App Startup
1270+ </a>
1271+ <ul id="app-startup-sublinks" class="sub-links">
1272+ </ul>
1273+ </div>
1274+ </div>
1275+ </aside>
1276+ <div id="main-content" class="main-content">
1277+
1278+ <div id="test-plan-modal" class="modal fade" role="dialog">
1279+ <div class="modal-dialog modal-lg">
1280+ <div class="modal-content">
1281+ <ul id="test-plan-modal-anchor"></ul>
1282+ </div>
1283+ </div>
1284+ </div>
1285+ <script id="test-plan-template" type="text/template">
1286+ <div class="modal-header">
1287+ <button type="button" class="close" data-dismiss="modal">&times;</button>
1288+ <h4>{{id}}: {{name}}</h4>
1289+ </div>
1290+ <div class="modal-body">
1291+ <div class="well">
1292+ <div class="row">
1293+ <div class="col-md-4">
1294+ <ul style="list-style-type:none">
1295+ <li>Status: {{Status}}</li>
1296+ <li>Test Level: {{Test Level}}</li>
1297+ <li>Test Priority: {{Test Priority}}</li>
1298+ </ul>
1299+ </div>
1300+ <div class="col-md-4">
1301+ <ul style="list-style-type:none">
1302+ <li>Author: {{Author}}</li>
1303+ <li>Created: {{Created}}</li>
1304+ <li>Last Modified: {{Last Modified}}</li>
1305+ </ul>
1306+ </div>
1307+ <div class="col-md-4">
1308+ <ul style="list-style-type:none">
1309+ <li>Application: {{Application}}</li>
1310+ <li>Domain: {{Test Domain}}</li>
1311+ <li>Devices: {{Devices}}</li>
1312+ </ul>
1313+ </div>
1314+ </div>
1315+ </div>
1316+ <div class="panel panel-default">
1317+ <table class="table table-condensed table-striped">
1318+ <thead>
1319+ <tr>
1320+ <th>#</th>
1321+ <th>Description</th>
1322+ <th>Expected Result</th>
1323+ </tr>
1324+ </thead>
1325+ <tbody>
1326+ {{#steps}}
1327+ <tr>
1328+ <td>{{Position}}</td>
1329+ <td>{{Description}}</td>
1330+ <td>{{Expected_results}}</td>
1331+ </tr
1332+ {{/steps}}
1333+ </tbody>
1334+ </table>
1335+ </div>
1336+ </div>
1337+ </script>
1338+ <div id="test-library-section" class="content-section">
1339+ <div class="panel panel-default">
1340+ <div class="panel-heading"><h1>Test Library</h1></div>
1341+ <div class="panel-body">
1342+ <div class="well well-sm">
1343+ <p>Tests are proposed, reviewed, and stored in a test-tracker (PractiTest, an external service)</p>
1344+ </div>
1345+ <div class="col-md-4">
1346+ <div id="testsInLibraryChartCanvasLegend" class="line-legend"></div>
1347+ <canvas id="testsInLibraryChartCanvas" height="600" width="800"></canvas>
1348+ </div>
1349+ <div class="col-md-4">
1350+ <div id="automatedVsManualChartCanvasLegend" class="line-legend"></div>
1351+ <canvas id="automatedVsManualChartCanvas" height="600" width="800"></canvas>
1352+ </div>
1353+ <div class="col-md-4">
1354+ <div id="percentageAutomatedChartCanvasLegend" class="line-legend"></div>
1355+ <canvas id="percentageAutomatedChartCanvas" height="600" width="800"></canvas>
1356+ </div>
1357+ <div class="col-md-12">
1358+ <table id="testLibraryTable" class="table table-striped table-bordered"></table>
1359+ </div>
1360+ </div>
1361+ </div>
1362+ </div> <!-- test-library-section -->
1363+
1364+ <div id="test-execution-section" class="content-section">
1365+ <div class="panel panel-default">
1366+ <div class="panel-heading"><h1>Test Execution</h1></div>
1367+ <div class="panel-body">
1368+ <div class="well well-sm">
1369+ <p>Manual and automated executions of regression and sanity suites on devices, by Beijing and Canonical teams</p>
1370+ </div>
1371+ <div class="col-md-4">
1372+ <div id="manualTestsExecutedPerWeekChartCanvasLegend" class="line-legend"></div>
1373+ <canvas id="manualTestsExecutedPerWeekChartCanvas" height="600" width="800"></canvas>
1374+ </div>
1375+ <div class="col-md-4">
1376+ <div id="automatedTestsExecutedPerWeekChartCanvasLegend" class="line-legend"></div>
1377+ <canvas id="automatedTestsExecutedPerWeekChartCanvas" height="600" width="800"></canvas>
1378+ </div>
1379+ <div class="col-md-4">
1380+ <div id="manualVsAutomatedChartCanvasLegend" class="line-legend"></div>
1381+ <canvas id="manualVsAutomatedChartCanvas" height="600" width="800"></canvas>
1382+ </div>
1383+ <div class="col-md-12">
1384+ <table id="testExecutionTable" class="table table-striped table-bordered"></table>
1385+ </div>
1386+ </div>
1387+ </div>
1388+ </div> <!-- test-execution-section -->
1389+
1390+ <div id="landings-section" class="content-section">
1391+ <div class="panel panel-default">
1392+ <div class="panel-heading"><h1>Landings</h1></div>
1393+ <div class="panel-body">
1394+ <div class="well well-sm">
1395+ <p>Silo landings reviewed by the Ops Team</p>
1396+ </div>
1397+ <div class="col-md-6">
1398+ <div id="siloLandingsPerWeekChartCanvasLegend" class="line-legend"></div>
1399+ <canvas id="siloLandingsPerWeekChartCanvas" height="600" width="800"></canvas>
1400+ </div>
1401+ <div class="col-md-6">
1402+ <div id="siloPassRatePerWeekChartCanvasLegend" class="line-legend"></div>
1403+ <canvas id="siloPassRatePerWeekChartCanvas" height="600" width="800"></canvas>
1404+ </div>
1405+ <div class="col-md-12">a
1406+ <table id="landingsTable" class="table table-striped table-bordered"></table>
1407+ </div>
1408+ </div>
1409+ </div>
1410+ </div> <!-- landings-section -->
1411+
1412+ <div id="landing-failures-section" class="content-section">
1413+ <div class="panel panel-default">
1414+ <div class="panel-heading"><h1>Landing Failures</h1></div>
1415+ <div class="panel-body">
1416+ <div class="well well-sm">
1417+ <p>Defects found during silo reviews by the Ops Team</p>
1418+ </div>
1419+ <table id="landingFailuresTable" class="table table-striped table-bordered"></table>
1420+ </div>
1421+ </div>
1422+ </div> <!-- landing-failures-section -->
1423+
1424+ <div id="test-plans-section" class="content-section">
1425+ <div class="panel panel-default">
1426+ <div class="panel-heading"><h1>Test Plans</h1></div>
1427+ <div class="panel-body">
1428+ <table id="testPlansTable" class="table table-striped table-bordered"></table>
1429+ </div>
1430+ </div>
1431+ </div>
1432+
1433+ <div id="app-startup-section" class="content-section">
1434+ <div class="panel panel-default">
1435+ <div class="panel-heading"><h1>App Startup Report</h1></div>
1436+ <div class="panel-body">
1437+ <table id="AppStartUpTable" class="table table-striped table-bordered"></table>
1438+ </div>
1439+ </div>
1440+ </div> <!-- app-startup-section -->
1441+
1442+ <div id="applications-manual-section" class="content-section">
1443+ <div class="panel panel-default">
1444+ <div class="panel-heading"><h1>Tests by Application Manual</h1></div>
1445+ <div class="panel-body">
1446+ <div id="tests-by-application-manual" class="col-md-6">
1447+ <canvas id="applicationsManualChartCanvas" height="400" width="400"></canvas>
1448+ </div>
1449+ </div>
1450+ </div>
1451+ </div> <!-- applications-manual-section -->
1452+
1453+ <div id="applications-automated-section" class="content-section">
1454+ <div class="panel panel-default">
1455+ <div class="panel-heading"><h1>Tests by Application Automated</h1></div>
1456+ <div class="panel-body">
1457+ <div id="tests-by-application-automated" class="col-md-6">
1458+ <canvas id="applicationsAutomatedChartCanvas" height="400" width="400"></canvas>
1459+ </div>
1460+ </div>
1461+ </div>
1462+ </div> <!-- applications-automated-section -->
1463+
1464+ <div id="domains-manual-section" class="content-section">
1465+ <div class="panel panel-default">
1466+ <div class="panel-heading"><h1>Tests by Domain Manual</h1></div>
1467+ <div class="panel-body">
1468+ <div class="col-md-6">
1469+ <canvas id="domainsManualChartCanvas" height="400" width="400"></canvas>
1470+ </div>
1471+ </div>
1472+ </div>
1473+ </div> <!-- domains-section -->
1474+
1475+ <div id="domains-automated-section" class="content-section">
1476+ <div class="panel panel-default">
1477+ <div class="panel-heading"><h1>Tests by Domain Automated</h1></div>
1478+ <div class="panel-body">
1479+ <div class="col-md-6">
1480+ <canvas id="domainsAutomatedChartCanvas" height="400" width="400"></canvas>
1481+ </div>
1482+ </div>
1483+ </div>
1484+ </div> <!-- domains-section -->
1485+
1486+ </div> <!-- main-content -->
1487+
1488+ <script>
1489+ $(function () {
1490+ var links = $('.sidebar-links > div');
1491+ links.on('click', function () {
1492+ links.removeClass('selected');
1493+ $(this).addClass('selected');
1494+ });
1495+ });
1496+ </script>
1497+ <script>
1498+
1499+// show only the content-section of id matching hash
1500+$(window).on("hashchange", function (e) {
1501+ moveToSection();
1502+
1503+});
1504+
1505+window.onload = function() {
1506+ drawSections(true);
1507+}
1508+ </script>
1509+</body>
1510+</html>
1511
1512=== added directory 'qakit/dashboard/js'
1513=== added file 'qakit/dashboard/js/kpi.js'
1514--- qakit/dashboard/js/kpi.js 1970-01-01 00:00:00 +0000
1515+++ qakit/dashboard/js/kpi.js 2016-02-11 21:28:26 +0000
1516@@ -0,0 +1,76 @@
1517+
1518+
1519+var translucentGold = "rgba(255,215,0,0.2)"
1520+var translucentGray = "rgba(194,209,240,0.1)"
1521+var translucentLimeGreen = "rgba(50,205,50,0.1)"
1522+var translucentRed = "rgba(255, 0, 0, 0.1)"
1523+var translucentMediumBlue = "rgba(194,209,240,0.2)"
1524+var translucentYellow = "rgba(255,215,0,0.2)"
1525+
1526+var defaultChartConfig = {
1527+ responsive: true,
1528+ animation: false,
1529+ bezierCurve: false,
1530+ pointDotRadius: 2,
1531+ pointHitDetectionRadius: 3,
1532+ scaleFontSize: 8,
1533+ legendTemplate: "<ul class=\"<%=name.toLowerCase()%>-legend\"><%=title%>"
1534+ + "<% for (var i=0; i<datasets.length; i++) { %>"
1535+ + "<li>"
1536+ + "<span style=\"background-color:<%=datasets[i].pointColor%>\"></span>"
1537+ + "<% if (datasets[i].label) { %><%= datasets[i].label %><% } %>"
1538+ + "</li>"
1539+ + "<% } %>"
1540+ + "</ul>",
1541+}
1542+
1543+function randomColor() {
1544+ r = Math.floor(Math.random() * 200);
1545+ g = Math.floor(Math.random() * 200);
1546+ b = Math.floor(Math.random() * 200);
1547+ return 'rgb(' + r + ', ' + g + ', ' + b + ')';
1548+}
1549+
1550+function pieChart(data, canvasId) {
1551+ var chartData = data.map(function(pair) {
1552+ return {"label": pair.name, "value": pair.value, "color": randomColor()}});
1553+ var options = {
1554+ animateRotate: false
1555+ };
1556+ var ctx = document.getElementById(canvasId).getContext("2d");
1557+ var chart = new Chart(ctx).Pie(chartData, options);
1558+}
1559+
1560+function drawApplicationsSection() {
1561+ $.getJSON("./data/applications-manual.json", function(data) {
1562+ pieChart(data, "applicationsManualChartCanvas");
1563+ }).fail(function(data, status) {
1564+ console.log("Hiding Manual Tests by Application section");
1565+ $("#applications-manual-link").hide();
1566+ $("#applications-manual-section").hide();
1567+ });
1568+ $.getJSON("./data/applications-automated.json", function(data) {
1569+ pieChart(data, "applicationsAutomatedChartCanvas");
1570+ }).fail(function(data, status) {
1571+ console.log("Hiding Automated Tests by Application section");
1572+ $("#applications-automated-link").hide();
1573+ $("#applications-automated-section").hide();
1574+ });
1575+}
1576+
1577+function drawDomainsSection() {
1578+ $.getJSON("./data/domains-manual.json", function(data) {
1579+ pieChart(data, "domainsManualChartCanvas");
1580+ }).fail(function(data, status) {
1581+ console.log("Hiding Manual Tests by Domain section");
1582+ $("#domains-manual-link").hide();
1583+ $("#domains-manual-section").hide();
1584+ });
1585+ $.getJSON("./data/domains-automated.json", function(data) {
1586+ pieChart(data, "domainsAutomatedChartCanvas");
1587+ }).fail(function(data, status) {
1588+ console.log("Hiding Automated Tests by Domain section");
1589+ $("#domains-automated-link").hide();
1590+ $("#domains-automated-section").hide();
1591+ });
1592+}
1593
1594=== added file 'qakit/dashboard/js/landing-failures.js'
1595--- qakit/dashboard/js/landing-failures.js 1970-01-01 00:00:00 +0000
1596+++ qakit/dashboard/js/landing-failures.js 2016-02-11 21:28:26 +0000
1597@@ -0,0 +1,30 @@
1598+
1599+
1600+function landingFailuresTable(data, selector) {
1601+ var tableData = data.map(function(obj) {
1602+ return [
1603+ new Date(obj.result_datetime),
1604+ "<a href=" + obj.url + ">" + obj.name + "</a>",
1605+ ];
1606+ });
1607+ $(selector).dataTable( {
1608+ data: tableData,
1609+ columns: [
1610+ { title: 'Date' },
1611+ { title: 'Silo' },
1612+ ],
1613+ searching: true,
1614+ order: [[0, 'dsc']],
1615+ bDestroy: true,
1616+ });
1617+}
1618+
1619+function drawLandingFailuresSection() {
1620+ $.getJSON("./data/landing-failures.json", function(data) {
1621+ landingFailuresTable(data, "#landingFailuresTable");
1622+ }).fail(function(data, status) {
1623+ console.log("Hiding Landing failures section");
1624+ $("#landing-failures-section").hide();
1625+ $("#landing-failures-link").hide();
1626+ });
1627+}
1628
1629=== added file 'qakit/dashboard/js/landings.js'
1630--- qakit/dashboard/js/landings.js 1970-01-01 00:00:00 +0000
1631+++ qakit/dashboard/js/landings.js 2016-02-11 21:28:26 +0000
1632@@ -0,0 +1,113 @@
1633+
1634+
1635+function siloLandingsPerWeekChart(data, canvas) {
1636+ var chartData = {
1637+ labels: data.map(function(week) { return week.end }),
1638+ datasets: [
1639+ {
1640+ label: "Total",
1641+ fillColor: translucentGray,
1642+ strokeColor: "Gray",
1643+ pointColor: "Gray",
1644+ pointStrokeColor: "White",
1645+ pointHighlightFill: "White",
1646+ pointHighlightStroke: "Gainsboro",
1647+ data: data.map(function(week) { return week.total })
1648+ },
1649+ {
1650+ label: "Passed",
1651+ fillColor: translucentMediumBlue,
1652+ strokeColor: "MediumBlue",
1653+ pointColor: "MediumBlue",
1654+ pointStrokeColor: "White",
1655+ pointHighlightFill: "White",
1656+ pointHighlightStroke: "Gainsboro",
1657+ data: data.map(function(week) { return week.passed }),
1658+ },
1659+ {
1660+ label: "Failed",
1661+ fillColor: translucentRed,
1662+ strokeColor: "Red",
1663+ pointColor: "Red",
1664+ pointStrokeColor: "White",
1665+ pointHighlightFill: "White",
1666+ pointHighlightStroke: "Gainsboro",
1667+ data: data.map(function(week) { return week.failed }),
1668+ },
1669+ ]
1670+ }
1671+ var ctx = document.getElementById(canvas).getContext("2d");
1672+ var chart = new Chart(ctx).Line(chartData, defaultChartConfig);
1673+ chart.title = "Silo Landings per Week";
1674+ document.getElementById(canvas + "Legend").innerHTML = chart.generateLegend();
1675+}
1676+
1677+function siloPassRatePerWeekChart(data, canvas) {
1678+ var chartData = {
1679+ labels: data.map(function(week) { return week.end }),
1680+ datasets: [
1681+ {
1682+ label: "Pass Rate",
1683+ fillColor: translucentGray,
1684+ strokeColor: "Gray",
1685+ pointColor: "Gray",
1686+ pointStrokeColor: "White",
1687+ pointHighlightFill: "White",
1688+ pointHighlightStroke: "Gainsboro",
1689+ data: data.map(function(week) { return week.pass_rate.toFixed(1) })
1690+ },
1691+ ]
1692+ }
1693+ var ctx = document.getElementById(canvas).getContext("2d");
1694+ var chart = new Chart(ctx).Line(chartData, defaultChartConfig);
1695+ chart.title = "Silo Pass Rate per Week";
1696+ document.getElementById(canvas + "Legend").innerHTML = chart.generateLegend();
1697+}
1698+
1699+function landingsTable(data, selector) {
1700+ var tableData = data.map(function(obj) {
1701+ return [
1702+ obj.end,
1703+ obj.week_number,
1704+ obj.total,
1705+ obj.passed,
1706+ obj.failed,
1707+ obj.pass_rate.toFixed(0) + '%',
1708+ (obj.average_time ? obj.average_time : 0).toFixed(1),
1709+ (obj.time_spent_on_failures ? obj.time_spent_on_failures : 0).toFixed(1),
1710+ (obj.cheapest ? obj.cheapest : 0).toFixed(1),
1711+ (obj.most_expensive ? obj.most_expensive : 0).toFixed(1),
1712+ ];
1713+ });
1714+ $(selector).dataTable( {
1715+ data: tableData,
1716+ columns: [
1717+ { title: 'Ending' },
1718+ { title: 'Week Number' },
1719+ { title: 'Total' },
1720+ { title: 'Passed' },
1721+ { title: 'Failed' },
1722+ { title: 'Pass Rate' },
1723+ { title: 'Average Time' },
1724+ { title: 'Time Spent on Failures' },
1725+ { title: 'Cheapest' },
1726+ { title: 'Most Expensive' },
1727+ ],
1728+ searching: false,
1729+ order: [[0, 'dsc']],
1730+ bDestroy: true,
1731+ });
1732+}
1733+
1734+function drawLandingsSection() {
1735+ $.getJSON("./data/landings.json", function(data) {
1736+ data = data.reverse()
1737+ siloLandingsPerWeekChart(data, "siloLandingsPerWeekChartCanvas");
1738+ siloPassRatePerWeekChart(data, "siloPassRatePerWeekChartCanvas");
1739+ landingsTable(data, "#landingsTable");
1740+ }).fail(function(data, status) {
1741+ console.log("Hiding Landings section");
1742+ $("#landings-section").hide();
1743+ $("#landings-link").hide();
1744+ });
1745+}
1746
1747=== added file 'qakit/dashboard/js/test-execution.js'
1748--- qakit/dashboard/js/test-execution.js 1970-01-01 00:00:00 +0000
1749+++ qakit/dashboard/js/test-execution.js 2016-02-11 21:28:26 +0000
1750@@ -0,0 +1,195 @@
1751+
1752+
1753+function manualTestsExecutedPerWeekChart(data, canvas) {
1754+ var chartData = {
1755+ labels: data.map(function(week) { return week.end }),
1756+ datasets: [
1757+ {
1758+ label: "Not Completed",
1759+ fillColor: translucentLimeGreen,
1760+ strokeColor: "LimeGreen",
1761+ pointColor: "LimeGreen",
1762+ pointStrokeColor: "White",
1763+ pointHighlightFill: "White",
1764+ pointHighlightStroke: "Gainsboro",
1765+ data: data.map(function(week) { return week.manual_not_completed })
1766+ },
1767+ {
1768+ label: "Blocked",
1769+ fillColor: translucentGold,
1770+ strokeColor: "Gold",
1771+ pointColor: "Gold",
1772+ pointStrokeColor: "White",
1773+ pointHighlightFill: "White",
1774+ pointHighlightStroke: "Gainsboro",
1775+ data: data.map(function(week) { return week.manual_blocked })
1776+ },
1777+ {
1778+ label: "Failed",
1779+ fillColor: translucentRed,
1780+ strokeColor: "Red",
1781+ pointColor: "Red",
1782+ pointStrokeColor: "White",
1783+ pointHighlightFill: "White",
1784+ pointHighlightStroke: "Gainsboro",
1785+ data: data.map(function(week) { return week.manual_failed })
1786+ },
1787+ {
1788+ label: "Passed",
1789+ fillColor: translucentMediumBlue,
1790+ strokeColor: "MediumBlue",
1791+ pointColor: "MediumBlue",
1792+ pointStrokeColor: "White",
1793+ pointHighlightFill: "White",
1794+ pointHighlightStroke: "Gainsboro",
1795+ data: data.map(function(week) { return week.manual_passed })
1796+ },
1797+ {
1798+ label: "Total",
1799+ fillColor: translucentGray,
1800+ strokeColor: "Gray",
1801+ pointColor: "Gray",
1802+ pointStrokeColor: "White",
1803+ pointHighlightFill: "White",
1804+ pointHighlightStroke: "Gainsboro",
1805+ data: data.map(function(week) { return week.manual })
1806+ },
1807+ ]
1808+ }
1809+ var ctx = document.getElementById(canvas).getContext("2d");
1810+ var chart = new Chart(ctx).Line(chartData, defaultChartConfig);
1811+ chart.title = "Manual Tests Executed Per Week";
1812+ document.getElementById(canvas + "Legend").innerHTML = chart.generateLegend();
1813+}
1814+
1815+function automatedTestsExecutedPerWeekChartCanvas(data, canvas) {
1816+ var chartData = {
1817+ labels: data.map(function(week) { return week.end }),
1818+ datasets: [
1819+ {
1820+ label: "Failed",
1821+ fillColor: translucentRed,
1822+ strokeColor: "Red",
1823+ pointColor: "Red",
1824+ pointStrokeColor: "White",
1825+ pointHighlightFill: "White",
1826+ pointHighlightStroke: "Gainsboro",
1827+ data: data.map(function(week) { return week.automated_failed })
1828+ },
1829+ {
1830+ label: "Passed",
1831+ fillColor: translucentMediumBlue,
1832+ strokeColor: "MediumBlue",
1833+ pointColor: "MediumBlue",
1834+ pointStrokeColor: "White",
1835+ pointHighlightFill: "White",
1836+ pointHighlightStroke: "Gainsboro",
1837+ data: data.map(function(week) { return week.automated_passed })
1838+ },
1839+ {
1840+ label: "Total",
1841+ fillColor: translucentGray,
1842+ strokeColor: "Gray",
1843+ pointColor: "Gray",
1844+ pointStrokeColor: "White",
1845+ pointHighlightFill: "White",
1846+ pointHighlightStroke: "Gainsboro",
1847+ data: data.map(function(week) { return week.automated })
1848+ },
1849+ ]
1850+ }
1851+ var ctx = document.getElementById(canvas).getContext("2d");
1852+ var chart = new Chart(ctx).Line(chartData, defaultChartConfig);
1853+ chart.title = "Automated Tests Executed Per Week";
1854+ document.getElementById(canvas + "Legend").innerHTML = chart.generateLegend();
1855+}
1856+
1857+function manualVsAutomatedChart(data, canvas) {
1858+ var chartData = {
1859+ labels: data.map(function(week) { return week.end }),
1860+ datasets: [
1861+ {
1862+ label: "Automated",
1863+ fillColor: translucentRed,
1864+ strokeColor: "Red",
1865+ pointColor: "Red",
1866+ pointStrokeColor: "White",
1867+ pointHighlightFill: "White",
1868+ pointHighlightStroke: "Gainsboro",
1869+ data: data.map(function(week) { return week.automated })
1870+ },
1871+ {
1872+ label: "Manual",
1873+ fillColor: translucentMediumBlue,
1874+ strokeColor: "MediumBlue",
1875+ pointColor: "MediumBlue",
1876+ pointStrokeColor: "White",
1877+ pointHighlightFill: "White",
1878+ pointHighlightStroke: "Gainsboro",
1879+ data: data.map(function(week) { return week.manual }),
1880+ },
1881+ ]
1882+ }
1883+ var ctx = document.getElementById(canvas).getContext("2d");
1884+ var chart = new Chart(ctx).Line(chartData, defaultChartConfig);
1885+ chart.title = "Manual vs. Automated";
1886+ document.getElementById(canvas + "Legend").innerHTML = chart.generateLegend();
1887+}
1888+
1889+function testExecutionTable(data, selector) {
1890+ var tableData = data.map(function(obj) {
1891+ return [
1892+ obj.end,
1893+ obj.week_number,
1894+ obj.total,
1895+ obj.manual,
1896+ obj.manual_passed,
1897+ obj.manual_failed,
1898+ obj.manual_blocked,
1899+ obj.manual_not_completed,
1900+ obj.automated,
1901+ obj.automated_passed,
1902+ obj.automated_failed,
1903+ obj.distinct_manual,
1904+ obj.distinct_automated,
1905+ ];
1906+ });
1907+ $(selector).dataTable( {
1908+ data: tableData,
1909+ columns: [
1910+ { title: 'Ending' },
1911+ { title: 'Week Number' },
1912+ { title: 'Total' },
1913+ { title: 'Manual' },
1914+ { title: 'Manual Passed' },
1915+ { title: 'Manual Failed' },
1916+ { title: 'Manual Blocked' },
1917+ { title: 'Manual Not Completed' },
1918+ { title: 'Automated' },
1919+ { title: 'Automated Passed' },
1920+ { title: 'Automated Failed' },
1921+ { title: 'Distinct Manual' },
1922+ { title: 'Distinct Automated' },
1923+ ],
1924+ searching: false,
1925+ order: [[0, 'dsc']],
1926+ bDestroy: true,
1927+ });
1928+}
1929+
1930+function drawTestExecutionSection() {
1931+ $.getJSON("./data/test-execution.json", function(data) {
1932+ data = data.reverse()
1933+ manualTestsExecutedPerWeekChart(
1934+ data, "manualTestsExecutedPerWeekChartCanvas");
1935+ automatedTestsExecutedPerWeekChartCanvas(
1936+ data, "automatedTestsExecutedPerWeekChartCanvas");
1937+ manualVsAutomatedChart(
1938+ data, "manualVsAutomatedChartCanvas");
1939+ testExecutionTable(data, '#testExecutionTable');
1940+ }).fail(function(data, status) {
1941+ console.log("Hiding Test Execution section");
1942+ $("#test-execution-section").hide();
1943+ $("#test-execution-link").hide();
1944+ });
1945+}
1946
1947=== added file 'qakit/dashboard/js/test-library.js'
1948--- qakit/dashboard/js/test-library.js 1970-01-01 00:00:00 +0000
1949+++ qakit/dashboard/js/test-library.js 2016-02-11 21:28:26 +0000
1950@@ -0,0 +1,144 @@
1951+
1952+
1953+function testsInLibraryChart(data, canvas) {
1954+ var chartData = {
1955+ labels: data.map(function(week) { return week.end }),
1956+ datasets: [
1957+ {
1958+ label: "Ready",
1959+ fillColor: translucentMediumBlue,
1960+ strokeColor: "MediumBlue",
1961+ pointColor: "MediumBlue",
1962+ pointStrokeColor: "White",
1963+ pointHighlightFill: "White",
1964+ pointHighlightStroke: "Gainsboro",
1965+ data: data.map(function(week) { return week.ready })
1966+ },
1967+ {
1968+ label: "To Review",
1969+ fillColor: translucentRed,
1970+ strokeColor: "Red",
1971+ pointColor: "Red",
1972+ pointStrokeColor: "White",
1973+ pointHighlightFill: "White",
1974+ pointHighlightStroke: "Gainsboro",
1975+ data: data.map(function(week) { return week.to_review }),
1976+ },
1977+ {
1978+ label: "Other",
1979+ fillColor: translucentYellow,
1980+ strokeColor: "Gold",
1981+ pointColor: "Gold",
1982+ pointStrokeColor: "White",
1983+ pointHighlightFill: "White",
1984+ pointHighlightStroke: "Gainsboro",
1985+ data: data.map(function(week) { return week.other_status }),
1986+ },
1987+ ]
1988+ }
1989+ var ctx = document.getElementById(canvas).getContext("2d");
1990+ var chart = new Chart(ctx).Line(chartData, defaultChartConfig);
1991+ chart.title = "Tests in Library";
1992+ document.getElementById(canvas + "Legend").innerHTML = chart.generateLegend();
1993+}
1994+
1995+function automatedVsManualChart(data, canvas) {
1996+ var chartData = {
1997+ labels: data.map(function(week) { return week.end }),
1998+ datasets: [
1999+ {
2000+ label: "Manual Ready",
2001+ fillColor: translucentMediumBlue,
2002+ strokeColor: "MediumBlue",
2003+ pointColor: "MediumBlue",
2004+ pointStrokeColor: "White",
2005+ pointHighlightFill: "White",
2006+ pointHighlightStroke: "Gainsboro",
2007+ data: data.map(function(week) { return week.manual_ready })
2008+ },
2009+ {
2010+ label: "Automated Ready",
2011+ fillColor: translucentRed,
2012+ strokeColor: "Red",
2013+ pointColor: "Red",
2014+ pointStrokeColor: "White",
2015+ pointHighlightFill: "White",
2016+ pointHighlightStroke: "Gainsboro",
2017+ data: data.map(function(week) { return week.automated_ready }),
2018+ },
2019+ ]
2020+ }
2021+ var ctx = document.getElementById(canvas).getContext("2d");
2022+ var chart = new Chart(ctx).Line(chartData, defaultChartConfig);
2023+ chart.title = "Automated vs. Manual";
2024+ document.getElementById(canvas + "Legend").innerHTML = chart.generateLegend();
2025+}
2026+
2027+function percentageAutomatedChart(data, canvas) {
2028+ var chartData = {
2029+ labels: data.map(function(week) { return week.end }),
2030+ datasets: [
2031+ {
2032+ label: "Percentage Automated",
2033+ fillColor: translucentMediumBlue,
2034+ strokeColor: "MediumBlue",
2035+ pointColor: "MediumBlue",
2036+ pointStrokeColor: "White",
2037+ pointHighlightFill: "White",
2038+ pointHighlightStroke: "Gainsboro",
2039+ data: data.map(function(week) { return (week.percent_automated * 100).toFixed(1) })
2040+ },
2041+ ]
2042+ }
2043+ var ctx = document.getElementById(canvas).getContext("2d");
2044+ var chart = new Chart(ctx).Line(chartData, defaultChartConfig);
2045+ chart.title = "Percent Automated";
2046+ document.getElementById(canvas + "Legend").innerHTML = chart.generateLegend();
2047+}
2048+
2049+function testLibraryTable(data, selector) {
2050+ var tableData = data.map(function(obj) {
2051+ return [
2052+ obj.end,
2053+ obj.week_number,
2054+ obj.total,
2055+ obj.ready,
2056+ obj.to_review,
2057+ obj.other_status,
2058+ obj.manual_ready,
2059+ obj.automated_ready,
2060+ (obj.percent_automated * 100).toFixed(1) + "%",
2061+ ];
2062+ });
2063+ $(selector).dataTable( {
2064+ data: tableData,
2065+ columns: [
2066+ { title: 'Ending' },
2067+ { title: 'Week Number' },
2068+ { title: 'Total' },
2069+ { title: 'Ready' },
2070+ { title: 'To Review' },
2071+ { title: 'Other' },
2072+ { title: 'Manual Ready' },
2073+ { title: 'Automated Ready' },
2074+ { title: '% Auto' },
2075+ ],
2076+ searching: false,
2077+ order: [[0, 'dsc']],
2078+ bDestroy: true,
2079+ });
2080+}
2081+
2082+function drawTestLibrarySection() {
2083+ $.getJSON("./data/test-library.json", function(data) {
2084+ data = data.reverse()
2085+ testsInLibraryChart(data, "testsInLibraryChartCanvas");
2086+ automatedVsManualChart(data, "automatedVsManualChartCanvas");
2087+ percentageAutomatedChart(data, "percentageAutomatedChartCanvas");
2088+ testLibraryTable(data, "#testLibraryTable");
2089+ }).fail(function(data, status) {
2090+ console.log("Hiding Test Library section");
2091+ $("#test-library-section").hide();
2092+ $("#test-library-link").hide();
2093+ });
2094+}
2095
2096=== added file 'qakit/dashboard/js/test-plans.js'
2097--- qakit/dashboard/js/test-plans.js 1970-01-01 00:00:00 +0000
2098+++ qakit/dashboard/js/test-plans.js 2016-02-11 21:28:26 +0000
2099@@ -0,0 +1,54 @@
2100+
2101+
2102+function testPlansTable(data, selector) {
2103+ var tableData = data.map(function(obj) {
2104+ return [
2105+ obj.id,
2106+ "<a href='#test-plan-modal-" + obj.id + "'>" + obj.name + "</a>",
2107+ obj.Application,
2108+ obj['Test Domain'],
2109+ ];
2110+ });
2111+ $(selector).dataTable( {
2112+ data: tableData,
2113+ columns: [
2114+ { title: 'ID' },
2115+ { title: 'Name' },
2116+ { title: 'Application' },
2117+ { title: 'Domain' },
2118+ ],
2119+ searching: true,
2120+ order: [[0, 'dsc']],
2121+ bDestroy: true,
2122+ });
2123+}
2124+
2125+function drawTestPlanModal(data, testPlanId) {
2126+ var template = $('#test-plan-template').html();
2127+ var testPlan = data.find(function(element, index, array) {
2128+ return (element.id == testPlanId);
2129+ });
2130+ testPlan.testPlanId = testPlan.id;
2131+ if (typeof testPlan['Test Domain'] === 'string') {
2132+ testPlan['Test Domain'] = JSON.parse(testPlan['Test Domain']);
2133+ }
2134+ if (typeof testPlan['Devices'] === 'string') {
2135+ testPlan['Devices'] = JSON.parse(testPlan['Devices']);
2136+ }
2137+ var html = Mustache.to_html(template, testPlan);
2138+ $('#test-plan-modal-anchor').html(html);
2139+}
2140+
2141+var testPlanData = null;
2142+
2143+function drawTestPlansSection() {
2144+ $.getJSON("./data/test-plans.json", function(data) {
2145+ testPlanData = data;
2146+ testPlansTable(data, "#testPlansTable");
2147+ }).fail(function(data, status) {
2148+ console.log("Hiding Test Plan section");
2149+ $("#test-plans-section").hide();
2150+ $("#test-plans-link").removeAttr("href");
2151+ })
2152+ ;
2153+}
2154
2155=== added file 'qakit/dashboard/tabs.html'
2156--- qakit/dashboard/tabs.html 1970-01-01 00:00:00 +0000
2157+++ qakit/dashboard/tabs.html 2016-02-11 21:28:26 +0000
2158@@ -0,0 +1,53 @@
2159+<!DOCTYPE html>
2160+<html lang="en">
2161+<head>
2162+<meta charset="UTF-8">
2163+<title>Example of Bootstrap 3 Tabs Methods</title>
2164+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
2165+<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
2166+<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
2167+<script type="text/javascript">
2168+$(document).ready(function(){
2169+ $("#myTab li:eq(1) a").tab('show');
2170+});
2171+</script>
2172+<style type="text/css">
2173+ .bs-example{
2174+ margin: 20px;
2175+ }
2176+</style>
2177+</head>
2178+<body>
2179+<div class="bs-example">
2180+ <ul class="nav nav-tabs" id="myTab">
2181+ <li><a data-toggle="tab" href="#sectionA">Section A</a></li>
2182+ <li><a data-toggle="tab" href="#sectionB">Section B</a></li>
2183+ <li class="dropdown">
2184+ <a data-toggle="dropdown" class="dropdown-toggle" href="#">Dropdown <b class="caret"></b></a>
2185+ <ul class="dropdown-menu">
2186+ <li><a data-toggle="tab" href="#dropdown1">Dropdown1</a></li>
2187+ <li><a data-toggle="tab" href="#dropdown2">Dropdown2</a></li>
2188+ </ul>
2189+ </li>
2190+ </ul>
2191+ <div class="tab-content">
2192+ <div id="sectionA" class="tab-pane fade in active">
2193+ <h3>Section A</h3>
2194+ <p>Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui. Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth.</p>
2195+ </div>
2196+ <div id="sectionB" class="tab-pane fade">
2197+ <h3>Section B</h3>
2198+ <p>Vestibulum nec erat eu nulla rhoncus fringilla ut non neque. Vivamus nibh urna, ornare id gravida ut, mollis a magna. Aliquam porttitor condimentum nisi, eu viverra ipsum porta ut. Nam hendrerit bibendum turpis, sed molestie mi fermentum id. Aenean volutpat velit sem. Sed consequat ante in rutrum convallis. Nunc facilisis leo at faucibus adipiscing.</p>
2199+ </div>
2200+ <div id="dropdown1" class="tab-pane fade">
2201+ <h3>Dropdown 1</h3>
2202+ <p>WInteger convallis, nulla in sollicitudin placerat, ligula enim auctor lectus, in mollis diam dolor at lorem. Sed bibendum nibh sit amet dictum feugiat. Vivamus arcu sem, cursus a feugiat ut, iaculis at erat. Donec vehicula at ligula vitae venenatis. Sed nunc nulla, vehicula non porttitor in, pharetra et dolor. Fusce nec velit velit. Pellentesque consectetur eros.</p>
2203+ </div>
2204+ <div id="dropdown2" class="tab-pane fade">
2205+ <h3>Dropdown 2</h3>
2206+ <p>Donec vel placerat quam, ut euismod risus. Sed a mi suscipit, elementum sem a, hendrerit velit. Donec at erat magna. Sed dignissim orci nec eleifend egestas. Donec eget mi consequat massa vestibulum laoreet. Mauris et ultrices nulla, malesuada volutpat ante. Fusce ut orci lorem. Donec molestie libero in tempus imperdiet. Cum sociis natoque penatibus et magnis dis parturient.</p>
2207+ </div>
2208+ </div>
2209+</div>
2210+</body>
2211+</html>

Subscribers

People subscribed via source and target branches

to all changes: