ortoni-report 2.0.8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +675 -675
- package/changelog.md +324 -287
- package/dist/chunk-DW4XGLAZ.mjs +22743 -0
- package/dist/cli/cli.d.mts +1 -0
- package/dist/cli/cli.d.ts +1 -0
- package/dist/cli/cli.js +25767 -0
- package/dist/cli/cli.mjs +3042 -0
- package/dist/ortoni-report.d.mts +114 -0
- package/dist/ortoni-report.d.ts +108 -103
- package/dist/ortoni-report.js +821 -846
- package/dist/ortoni-report.mjs +273 -23029
- package/dist/style/main.css +80 -92
- package/dist/views/head.hbs +10 -10
- package/dist/views/main.hbs +1116 -576
- package/dist/views/navbar.hbs +34 -35
- package/dist/views/project.hbs +237 -237
- package/dist/views/sidebar.hbs +236 -0
- package/dist/views/summaryCard.hbs +14 -7
- package/dist/views/testIcons.hbs +12 -12
- package/dist/views/testPanel.hbs +44 -44
- package/dist/views/testStatus.hbs +8 -8
- package/dist/views/userInfo.hbs +251 -208
- package/package.json +55 -53
- package/readme.md +210 -193
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
<style>
|
|
2
|
+
/* Additional styles for sidebar layout */
|
|
3
|
+
:root {
|
|
4
|
+
--sidebar-width: 250px;
|
|
5
|
+
--sidebar-collapsed-width: 60px;
|
|
6
|
+
--primary-color: #735DA5;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
body {
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
min-height: 100vh;
|
|
13
|
+
margin: 0;
|
|
14
|
+
padding: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.app-container {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex: 1;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.sidebar {
|
|
24
|
+
width: var(--sidebar-width);
|
|
25
|
+
border-right: 1px solid #e0e0e0;
|
|
26
|
+
height: 100vh;
|
|
27
|
+
position: fixed;
|
|
28
|
+
left: 0;
|
|
29
|
+
transition: width 0.3s ease;
|
|
30
|
+
z-index: 10;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sidebar.collapsed {
|
|
34
|
+
width: var(--sidebar-collapsed-width);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.sidebar-header {
|
|
38
|
+
padding: 1rem;
|
|
39
|
+
border-bottom: 1px solid #e0e0e0;
|
|
40
|
+
font-weight: bold;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.sidebar-menu {
|
|
44
|
+
list-style: none;
|
|
45
|
+
padding: 0;
|
|
46
|
+
margin: 0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.sidebar-footer {
|
|
50
|
+
list-style: none;
|
|
51
|
+
padding: 0;
|
|
52
|
+
margin: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.sidebar-menu-item {
|
|
56
|
+
padding: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.sidebar-menu-link {
|
|
60
|
+
display: flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
padding: 0.75rem 1rem;
|
|
63
|
+
text-decoration: none;
|
|
64
|
+
transition: background-color 0.2s;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.sidebar-menu-link.active {
|
|
68
|
+
font-weight: bold;
|
|
69
|
+
border-left: 3px solid var(--primary-color);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.sidebar-menu-link .icon {
|
|
73
|
+
margin-right: 0.5rem;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.main-content {
|
|
77
|
+
flex: 1;
|
|
78
|
+
margin-left: var(--sidebar-width);
|
|
79
|
+
padding: 1.5rem;
|
|
80
|
+
overflow-y: auto;
|
|
81
|
+
transition: margin-left 0.3s ease;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.navbar {
|
|
85
|
+
position: fixed;
|
|
86
|
+
top: 0;
|
|
87
|
+
left: 0;
|
|
88
|
+
right: 0;
|
|
89
|
+
height: var(--header-height);
|
|
90
|
+
z-index: 20;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.theme {
|
|
94
|
+
display: flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
padding: 0.75rem 1rem;
|
|
97
|
+
text-decoration: none;
|
|
98
|
+
transition: background-color 0.2s;
|
|
99
|
+
bottom: 65px;
|
|
100
|
+
position: absolute;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.theme .icon {
|
|
104
|
+
margin-right: 0.5rem;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
.section {
|
|
109
|
+
margin-top: var(--header-height);
|
|
110
|
+
padding-top: 1rem;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Mobile responsive styles */
|
|
114
|
+
@media screen and (max-width: 768px) {
|
|
115
|
+
.sidebar {
|
|
116
|
+
transform: translateX(-100%);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.sidebar.is-active {
|
|
120
|
+
transform: translateX(0);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.main-content {
|
|
124
|
+
margin-left: 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.sidebar-toggle {
|
|
128
|
+
display: block;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.sidebar-toggle-btn {
|
|
132
|
+
display: none;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.sidebar-toggle-btn {
|
|
137
|
+
position: absolute;
|
|
138
|
+
bottom: 20px;
|
|
139
|
+
right: -15px;
|
|
140
|
+
width: 30px;
|
|
141
|
+
height: 30px;
|
|
142
|
+
background-color: var(--primary-color);;
|
|
143
|
+
color: white;
|
|
144
|
+
border-radius: 50%;
|
|
145
|
+
display: flex;
|
|
146
|
+
align-items: center;
|
|
147
|
+
justify-content: center;
|
|
148
|
+
cursor: pointer;
|
|
149
|
+
z-index: 20;
|
|
150
|
+
border: none;
|
|
151
|
+
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.sidebar-menu-text {
|
|
155
|
+
transition: opacity 0.2s ease;
|
|
156
|
+
white-space: nowrap;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.sidebar.collapsed .sidebar-menu-text {
|
|
160
|
+
opacity: 0;
|
|
161
|
+
visibility: hidden;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.sidebar.collapsed .sidebar-header {
|
|
165
|
+
text-align: center;
|
|
166
|
+
padding: 1rem 0.5rem;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.main-content.expanded {
|
|
170
|
+
margin-left: var(--sidebar-collapsed-width);
|
|
171
|
+
}
|
|
172
|
+
.sidebar-header {
|
|
173
|
+
cursor: none;
|
|
174
|
+
display: flex;
|
|
175
|
+
align-items: center;
|
|
176
|
+
justify-content: start;
|
|
177
|
+
padding: 1rem;
|
|
178
|
+
border-bottom: 1px solid #e0e0e0;
|
|
179
|
+
font-weight: bold;
|
|
180
|
+
height: 60px; /* Fixed height for consistency */
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.sidebar-header .logo {
|
|
184
|
+
width: 30px; /* Adjust logo size as needed */
|
|
185
|
+
height: 30px;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.sidebar-header .header-text {
|
|
189
|
+
display: block; /* Show text by default */
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* Collapsed state adjustments */
|
|
193
|
+
.sidebar.collapsed .sidebar-header .header-text {
|
|
194
|
+
display: none; /* Hide text when collapsed */
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.sidebar.collapsed .sidebar-header .logo {
|
|
198
|
+
display: block; /* Show logo when collapsed */
|
|
199
|
+
}
|
|
200
|
+
</style>
|
|
201
|
+
<aside class="sidebar" id="sidebar">
|
|
202
|
+
<div class="sidebar-header">
|
|
203
|
+
<figure class="image">
|
|
204
|
+
<img alt="Logo" class="logo" src="https://raw.githubusercontent.com/ortoniKC/ortoni-report/refs/heads/main/ortoni.png" />
|
|
205
|
+
</figure>
|
|
206
|
+
<span class="header-text ml-4 title is-5">Ortoni Report</span>
|
|
207
|
+
</div>
|
|
208
|
+
<ul class="sidebar-menu">
|
|
209
|
+
<li class="sidebar-menu-item">
|
|
210
|
+
<a class="sidebar-menu-link active" data-section="dashboard">
|
|
211
|
+
<span class="icon">
|
|
212
|
+
<i class="fa fa-chart-bar"></i>
|
|
213
|
+
</span>
|
|
214
|
+
<span class="sidebar-menu-text">Dashboard</span>
|
|
215
|
+
</a>
|
|
216
|
+
</li>
|
|
217
|
+
<li class="sidebar-menu-item">
|
|
218
|
+
<a class="sidebar-menu-link" data-section="tests">
|
|
219
|
+
<span class="icon">
|
|
220
|
+
<i class="fa fa-vial"></i>
|
|
221
|
+
</span>
|
|
222
|
+
<span class="sidebar-menu-text">Tests</span>
|
|
223
|
+
</a>
|
|
224
|
+
</li>
|
|
225
|
+
</ul>
|
|
226
|
+
<a class="theme" data-theme-status="{{preferredTheme}}" id="toggle-theme">
|
|
227
|
+
<span class="icon">
|
|
228
|
+
<i class="" id="theme-icon"></i>
|
|
229
|
+
</span>
|
|
230
|
+
<span class="sidebar-menu-text">Theme</span>
|
|
231
|
+
</a>
|
|
232
|
+
|
|
233
|
+
<button class="sidebar-toggle-btn" id="sidebar-toggle">
|
|
234
|
+
<i class="fa fa-chevron-left" id="sidebar-toggle-icon"></i>
|
|
235
|
+
</button>
|
|
236
|
+
</aside>
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
{{#if (gr statusCount) }}
|
|
2
|
-
<div class="column is-one-sixth">
|
|
3
|
-
<div class="box
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
{{#if (gr statusCount) }}
|
|
2
|
+
<div class="column is-one-sixth">
|
|
3
|
+
<div class="box {{filter}} {{#if filter}}is-clickable{{/if}}" style="border-left: 5px solid {{bg}}"
|
|
4
|
+
data-status="{{status}}">
|
|
5
|
+
{{#if icon}}
|
|
6
|
+
<p class="title is-size-6 mb-0">
|
|
7
|
+
{{statusCount}} <span class="icon is-small"><i class="{{icon}}"></i></span>
|
|
8
|
+
</p>
|
|
9
|
+
{{else}}
|
|
10
|
+
<p class="title is-size-3 mb-0">{{statusCount}}</p>
|
|
11
|
+
<p class="subtitle is-size-7">{{statusHeader}}</p>
|
|
12
|
+
{{/if}}
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
8
15
|
{{/if}}
|
package/dist/views/testIcons.hbs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<div class="icon-text">
|
|
2
|
-
{{#if isRetry}}
|
|
3
|
-
<span class="icon has-text-info">
|
|
4
|
-
<i class="fa-solid fa-rotate-right" style="color: #fff;"></i>
|
|
5
|
-
</span>
|
|
6
|
-
{{/if}}
|
|
7
|
-
<span>{{title}}</span>
|
|
8
|
-
</div>
|
|
9
|
-
{{#if @root.showProject}}
|
|
10
|
-
<span class="tag duration-tag has-text-weight-medium">{{duration}}</span>
|
|
11
|
-
{{else}}
|
|
12
|
-
<span class="tag duration-tag has-text-weight-medium">{{projectName}}</span>
|
|
1
|
+
<div class="icon-text">
|
|
2
|
+
{{#if isRetry}}
|
|
3
|
+
<span class="icon has-text-info">
|
|
4
|
+
<i class="fa-solid fa-rotate-right" style="color: #fff;"></i>
|
|
5
|
+
</span>
|
|
6
|
+
{{/if}}
|
|
7
|
+
<span>{{title}}</span>
|
|
8
|
+
</div>
|
|
9
|
+
{{#if @root.showProject}}
|
|
10
|
+
<span class="tag duration-tag has-text-weight-medium">{{duration}}</span>
|
|
11
|
+
{{else}}
|
|
12
|
+
<span class="tag duration-tag has-text-weight-medium">{{projectName}}</span>
|
|
13
13
|
{{/if}}
|
package/dist/views/testPanel.hbs
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
<div class="columns is-mobile is-vcentered is-gapless">
|
|
2
|
-
<div class="column">
|
|
3
|
-
<div class="control">
|
|
4
|
-
<input class="input" name="search" type="search" placeholder="Search by test" />
|
|
5
|
-
</div>
|
|
6
|
-
</div>
|
|
7
|
-
<div class="column is-2 mr-3">
|
|
8
|
-
<div id="project-filter" class="dropdown is-right is-hoverable is-pulled-right">
|
|
9
|
-
<div class="dropdown-trigger">
|
|
10
|
-
<button class="button is-primary" aria-haspopup="true" aria-controls="select-filter">
|
|
11
|
-
<span>Filters</span>
|
|
12
|
-
<span class="icon is-small">
|
|
13
|
-
<i class="fa-solid fa-filter" aria-hidden="true"></i>
|
|
14
|
-
</span>
|
|
15
|
-
</button>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="dropdown-menu" id="select-filter" role="menu">
|
|
18
|
-
<div class="dropdown-content">
|
|
19
|
-
<p class="dropdown-item has-text-weight-semibold has-text-primary">Projects</p>
|
|
20
|
-
{{#each projects}}
|
|
21
|
-
<div class="dropdown-item">
|
|
22
|
-
<label class="checkbox is-capitalized">
|
|
23
|
-
<input name="{{this}}" type="checkbox" data-filter-type="project" value="{{this}}" />
|
|
24
|
-
{{this}}
|
|
25
|
-
</label>
|
|
26
|
-
</div>
|
|
27
|
-
{{/each}}
|
|
28
|
-
<hr class="dropdown-divider" />
|
|
29
|
-
<p class="dropdown-item has-text-weight-semibold has-text-primary">Tags</p>
|
|
30
|
-
{{#each allTags}}
|
|
31
|
-
<div class="dropdown-item">
|
|
32
|
-
<label class="checkbox">
|
|
33
|
-
<input name="{{this}}" type="checkbox" data-filter-type="test-tags" value="{{this}}" />
|
|
34
|
-
{{this}}
|
|
35
|
-
</label>
|
|
36
|
-
</div>
|
|
37
|
-
{{/each}}
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
<div class="content">
|
|
44
|
-
<span id="selected-filters"></span>
|
|
1
|
+
<div class="columns is-mobile is-vcentered is-gapless">
|
|
2
|
+
<div class="column">
|
|
3
|
+
<div class="control">
|
|
4
|
+
<input class="input" name="search" type="search" placeholder="Search by test" />
|
|
5
|
+
</div>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="column is-2 mr-3">
|
|
8
|
+
<div id="project-filter" class="dropdown is-right is-hoverable is-pulled-right">
|
|
9
|
+
<div class="dropdown-trigger">
|
|
10
|
+
<button class="button is-primary" aria-haspopup="true" aria-controls="select-filter">
|
|
11
|
+
<span>Filters</span>
|
|
12
|
+
<span class="icon is-small">
|
|
13
|
+
<i class="fa-solid fa-filter" aria-hidden="true"></i>
|
|
14
|
+
</span>
|
|
15
|
+
</button>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="dropdown-menu" id="select-filter" role="menu">
|
|
18
|
+
<div class="dropdown-content">
|
|
19
|
+
<p class="dropdown-item has-text-weight-semibold has-text-primary">Projects</p>
|
|
20
|
+
{{#each projects}}
|
|
21
|
+
<div class="dropdown-item">
|
|
22
|
+
<label class="checkbox is-capitalized">
|
|
23
|
+
<input name="{{this}}" type="checkbox" data-filter-type="project" value="{{this}}" />
|
|
24
|
+
{{this}}
|
|
25
|
+
</label>
|
|
26
|
+
</div>
|
|
27
|
+
{{/each}}
|
|
28
|
+
<hr class="dropdown-divider" />
|
|
29
|
+
<p class="dropdown-item has-text-weight-semibold has-text-primary">Tags</p>
|
|
30
|
+
{{#each allTags}}
|
|
31
|
+
<div class="dropdown-item">
|
|
32
|
+
<label class="checkbox">
|
|
33
|
+
<input name="{{this}}" type="checkbox" data-filter-type="test-tags" value="{{this}}" />
|
|
34
|
+
{{this}}
|
|
35
|
+
</label>
|
|
36
|
+
</div>
|
|
37
|
+
{{/each}}
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="content">
|
|
44
|
+
<span id="selected-filters"></span>
|
|
45
45
|
</div>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
<div class="test-item
|
|
2
|
-
{{#if (eq status 'passed')}}status-passed
|
|
3
|
-
{{else if (or (eq status 'failed') (eq status 'timedOut'))}}status-failed
|
|
4
|
-
{{else if (includes status 'flaky')}}status-flaky
|
|
5
|
-
{{else if (eq status 'skipped')}}status-skipped is-hidden{{/if}}" data-suite-name="{{suite}}"
|
|
6
|
-
data-test-tags="{{joinWithSpace testTags}}" data-project-name="{{projectName}}" data-test-id="{{index}}"
|
|
7
|
-
data-test-history-id="{{testId}}" data-test-status="{{status}} {{retry}}" data-test-duration="{{duration}}">
|
|
8
|
-
{{> testIcons}}
|
|
1
|
+
<div class="test-item
|
|
2
|
+
{{#if (eq status 'passed')}}status-passed
|
|
3
|
+
{{else if (or (eq status 'failed') (eq status 'timedOut'))}}status-failed
|
|
4
|
+
{{else if (includes status 'flaky')}}status-flaky
|
|
5
|
+
{{else if (eq status 'skipped')}}status-skipped is-hidden{{/if}} ml-4" data-suite-name="{{suite}}"
|
|
6
|
+
data-test-tags="{{joinWithSpace testTags}}" data-project-name="{{projectName}}" data-test-id="{{index}}"
|
|
7
|
+
data-test-history-id="{{testId}}" data-test-status="{{status}} {{retry}}" data-test-duration="{{duration}}">
|
|
8
|
+
{{> testIcons}}
|
|
9
9
|
</div>
|