Spaces:
Runtime error
Runtime error
Commit
·
1fa064d
1
Parent(s):
f98d486
Upload 23 files
Browse files- static/Dashboard.css +161 -0
- static/GenerationTable.css +45 -0
- static/Images/Background.jpg +0 -0
- static/Images/Language Translation.jpg +0 -0
- static/Images/Project Breakdown.png +0 -0
- static/Images/Refineverse logo.png +0 -0
- static/Images/Text Generation logo.png +0 -0
- static/Images/Text Summarization.png +0 -0
- static/ProjectBreakdown.css +190 -0
- static/SummarizationTable.css +49 -0
- static/TextGeneration.css +317 -0
- static/TextSummarization.css +316 -0
- static/Translation.css +140 -0
- static/TranslationTable.css +44 -0
- static/atlassian-connect.json +26 -0
- templates/GenerationTable.html +94 -0
- templates/LanguageTranslationUI.html +119 -0
- templates/ProjectBreakdownUI.html +171 -0
- templates/RefineverseDashboardUI.html +57 -0
- templates/SummarizationTable.html +94 -0
- templates/TextGenerationUI.html +105 -0
- templates/TextSummarizationUI.html +103 -0
- templates/TranslationTable.html +96 -0
static/Dashboard.css
ADDED
@@ -0,0 +1,161 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body{
|
2 |
+
background-image:url("../static/Images/Background.jpg");
|
3 |
+
background-repeat: no-repeat;
|
4 |
+
background-size: cover;
|
5 |
+
}
|
6 |
+
.title{
|
7 |
+
display:flex;
|
8 |
+
flex-direction:row;
|
9 |
+
align-items: center;
|
10 |
+
}
|
11 |
+
.title img{
|
12 |
+
width: 250px;
|
13 |
+
height: 250px;
|
14 |
+
margin-right: 170px;
|
15 |
+
margin-left: 280px;
|
16 |
+
margin-top: 20px;
|
17 |
+
}
|
18 |
+
.title h1{
|
19 |
+
white-space: nowrap;
|
20 |
+
font-size: 70px;
|
21 |
+
color:rgb(80, 80, 80);
|
22 |
+
}
|
23 |
+
|
24 |
+
.p1{
|
25 |
+
width: 380px;
|
26 |
+
height: 220px;
|
27 |
+
border: 2px solid rgb(139, 138, 138);
|
28 |
+
padding-top: 10px;
|
29 |
+
padding-bottom: 10px;
|
30 |
+
|
31 |
+
}
|
32 |
+
.p2{
|
33 |
+
width: 240px;
|
34 |
+
height: 220px;
|
35 |
+
border: 2px solid rgb(139, 138, 138);
|
36 |
+
padding-left: 60px;
|
37 |
+
padding-right: 60px;
|
38 |
+
padding-top: 10px;
|
39 |
+
padding-bottom: 10px;
|
40 |
+
margin-left: 240px;
|
41 |
+
|
42 |
+
}
|
43 |
+
.p3{
|
44 |
+
width: 240px;
|
45 |
+
height: 220px;
|
46 |
+
border: 2px solid rgb(139, 138, 138);
|
47 |
+
padding-left: 60px;
|
48 |
+
padding-right: 60px;
|
49 |
+
padding-top: 10px;
|
50 |
+
padding-bottom: 10px;
|
51 |
+
|
52 |
+
|
53 |
+
}
|
54 |
+
.p4{
|
55 |
+
width: 230px;
|
56 |
+
height: 220px;
|
57 |
+
border: 2px solid rgb(139, 138, 138);
|
58 |
+
padding-left: 85px;
|
59 |
+
padding-right: 60px;
|
60 |
+
padding-top: 10px;
|
61 |
+
padding-bottom: 10px;
|
62 |
+
margin-left: 250px;
|
63 |
+
|
64 |
+
}
|
65 |
+
.con1{
|
66 |
+
display: flex;
|
67 |
+
flex-direction: column;
|
68 |
+
margin-left: 400px;
|
69 |
+
}
|
70 |
+
.trd2{
|
71 |
+
margin-top: 20px;
|
72 |
+
}
|
73 |
+
|
74 |
+
.trdl h2{
|
75 |
+
white-space: nowrap;
|
76 |
+
font-size: 30px;
|
77 |
+
color:rgb(28, 29, 29)
|
78 |
+
}
|
79 |
+
|
80 |
+
.trd2 h2{
|
81 |
+
white-space: nowrap;
|
82 |
+
font-size: 30px;
|
83 |
+
color:rgb(28, 29, 29)
|
84 |
+
}
|
85 |
+
.buttonc, .buttonc1{
|
86 |
+
margin-top: 40px;
|
87 |
+
white-space:nowrap;
|
88 |
+
}
|
89 |
+
.buttonc a{
|
90 |
+
display: inline-block;
|
91 |
+
color: white;
|
92 |
+
background-color: rgb(85, 81, 81);
|
93 |
+
padding: 10px 20px;
|
94 |
+
border-radius: 5px;
|
95 |
+
text-decoration: none;
|
96 |
+
font-size: 18px;
|
97 |
+
}
|
98 |
+
.buttonc1 a{
|
99 |
+
display: inline-block;
|
100 |
+
color: white;
|
101 |
+
background-color: rgb(85, 81, 81);
|
102 |
+
padding: 10px 20px;
|
103 |
+
border-radius: 5px;
|
104 |
+
text-decoration: none;
|
105 |
+
font-size: 18px;
|
106 |
+
}
|
107 |
+
.pic{
|
108 |
+
white-space: nowrap;
|
109 |
+
display: flex;
|
110 |
+
flex-direction: row;
|
111 |
+
|
112 |
+
}
|
113 |
+
.pic1{
|
114 |
+
white-space: nowrap;
|
115 |
+
display: flex;
|
116 |
+
flex-direction: row;
|
117 |
+
|
118 |
+
}
|
119 |
+
.tc1{
|
120 |
+
display: flex;
|
121 |
+
flex-direction: row;
|
122 |
+
margin-bottom:-30px;
|
123 |
+
}
|
124 |
+
.tc2{
|
125 |
+
display: flex;
|
126 |
+
flex-direction: row;
|
127 |
+
}
|
128 |
+
.texts1{
|
129 |
+
width:400px;
|
130 |
+
word-wrap: break-word;
|
131 |
+
}
|
132 |
+
.texts2{
|
133 |
+
width:400px;
|
134 |
+
word-wrap: break-word;
|
135 |
+
margin-left: 220px;
|
136 |
+
|
137 |
+
}
|
138 |
+
.texts3{
|
139 |
+
width:400px;
|
140 |
+
word-wrap: break-word;
|
141 |
+
min-width: 400px;
|
142 |
+
|
143 |
+
}
|
144 |
+
.texts4{
|
145 |
+
width:400px;
|
146 |
+
word-wrap: break-word;
|
147 |
+
margin-left: 220px;
|
148 |
+
|
149 |
+
}
|
150 |
+
.button1{
|
151 |
+
margin-left: 50px;
|
152 |
+
}
|
153 |
+
.button2{
|
154 |
+
margin-left: 350px;
|
155 |
+
}
|
156 |
+
.button3{
|
157 |
+
margin-left: 50px;
|
158 |
+
}
|
159 |
+
.button4{
|
160 |
+
margin-left: 380px;
|
161 |
+
}
|
static/GenerationTable.css
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
#generation-table {
|
3 |
+
width: 100%;
|
4 |
+
}
|
5 |
+
|
6 |
+
#generation-table th,
|
7 |
+
#generation-tablee td {
|
8 |
+
border: 1px solid #ddd;
|
9 |
+
padding: 8px;
|
10 |
+
text-align: left;
|
11 |
+
}
|
12 |
+
|
13 |
+
#generation-table th:first-child {
|
14 |
+
border-left: none;
|
15 |
+
}
|
16 |
+
|
17 |
+
#generation-table th:last-child {
|
18 |
+
border-right: none;
|
19 |
+
}
|
20 |
+
|
21 |
+
#generation-table th:not(:first-child) {
|
22 |
+
border-left: none;
|
23 |
+
border-right: none;
|
24 |
+
}
|
25 |
+
|
26 |
+
#generation-table th div {
|
27 |
+
border-bottom: 1px solid #ddd;
|
28 |
+
padding: 8px;
|
29 |
+
}
|
30 |
+
|
31 |
+
#generation-table td div {
|
32 |
+
padding: 8px;
|
33 |
+
}
|
34 |
+
|
35 |
+
#generation-table thead th {
|
36 |
+
background-color: #f2f2f2;
|
37 |
+
}
|
38 |
+
|
39 |
+
#generation-table tbody tr:nth-child(even) {
|
40 |
+
background-color: #f2f2f2;
|
41 |
+
}
|
42 |
+
|
43 |
+
#generation-table tbody tr:hover {
|
44 |
+
background-color: #ddd;
|
45 |
+
}
|
static/Images/Background.jpg
ADDED
![]() |
static/Images/Language Translation.jpg
ADDED
![]() |
static/Images/Project Breakdown.png
ADDED
![]() |
static/Images/Refineverse logo.png
ADDED
![]() |
static/Images/Text Generation logo.png
ADDED
![]() |
static/Images/Text Summarization.png
ADDED
![]() |
static/ProjectBreakdown.css
ADDED
@@ -0,0 +1,190 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body{
|
2 |
+
background-image:url("../static/Images/Background.jpg");
|
3 |
+
background-repeat: no-repeat;
|
4 |
+
background-size: cover;
|
5 |
+
}
|
6 |
+
* {
|
7 |
+
margin: 0;
|
8 |
+
padding: 0;
|
9 |
+
box-sizing: border-box;
|
10 |
+
}
|
11 |
+
|
12 |
+
header {
|
13 |
+
display: flex;
|
14 |
+
align-items: center;
|
15 |
+
zoom: 130%;
|
16 |
+
padding: 15px;
|
17 |
+
}
|
18 |
+
|
19 |
+
header img {
|
20 |
+
/* Original width & height is 70px */
|
21 |
+
width: 200px;
|
22 |
+
height: 200px;
|
23 |
+
margin-left: 300px;
|
24 |
+
}
|
25 |
+
|
26 |
+
header h1 {
|
27 |
+
margin-left: 50px;
|
28 |
+
font-size: 40px;
|
29 |
+
color: rgb(26, 25, 25);
|
30 |
+
}
|
31 |
+
|
32 |
+
main {
|
33 |
+
display: flex;
|
34 |
+
justify-content: space-between;
|
35 |
+
margin-top: 20px;
|
36 |
+
margin-bottom: 20px;
|
37 |
+
}
|
38 |
+
|
39 |
+
.user-story {
|
40 |
+
flex-basis: 30%;
|
41 |
+
margin-left: 50px;
|
42 |
+
}
|
43 |
+
|
44 |
+
.user-story h2 {
|
45 |
+
margin-bottom: 10px;
|
46 |
+
}
|
47 |
+
|
48 |
+
textarea {
|
49 |
+
width: 900px;
|
50 |
+
height: 400px;
|
51 |
+
padding: 10px;
|
52 |
+
border: 1px solid #ccc;
|
53 |
+
border-radius: 5px;
|
54 |
+
resize: none !important;
|
55 |
+
margin-bottom: 10px;
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
table {
|
60 |
+
flex-basis: 60%;
|
61 |
+
margin-right: 20px;
|
62 |
+
border: 1px solid #ccc;
|
63 |
+
border-radius: 5px;
|
64 |
+
overflow-y: scroll; /* To make the table scrollable */
|
65 |
+
height: 200px; /* To match text area size */
|
66 |
+
display: block;
|
67 |
+
border-collapse: separate; /* Added to separate the border between the headers and the data cells */
|
68 |
+
border-spacing: 0; /* Added to remove the extra space between the border */
|
69 |
+
}
|
70 |
+
|
71 |
+
#breakdown-table {
|
72 |
+
width: 900px;
|
73 |
+
height: 400px;
|
74 |
+
margin-left: 20px;
|
75 |
+
}
|
76 |
+
|
77 |
+
#breakdown-table th,
|
78 |
+
#breakdown-table td {
|
79 |
+
border: 1px solid #ddd;
|
80 |
+
padding: 8px;
|
81 |
+
text-align: left;
|
82 |
+
}
|
83 |
+
|
84 |
+
#breakdown-table th:first-child {
|
85 |
+
border-left: none;
|
86 |
+
}
|
87 |
+
|
88 |
+
#breakdown-table th:last-child {
|
89 |
+
border-right: none;
|
90 |
+
}
|
91 |
+
|
92 |
+
#breakdown-table th:not(:first-child) {
|
93 |
+
border-left: none;
|
94 |
+
border-right: none;
|
95 |
+
}
|
96 |
+
|
97 |
+
#breakdown-table th div {
|
98 |
+
border-bottom: 1px solid #ddd;
|
99 |
+
padding: 8px;
|
100 |
+
}
|
101 |
+
|
102 |
+
#breakdown-table td div {
|
103 |
+
padding: 8px;
|
104 |
+
}
|
105 |
+
|
106 |
+
#breakdown-table thead th {
|
107 |
+
background-color: #f2f2f2;
|
108 |
+
}
|
109 |
+
|
110 |
+
#breakdown-table tbody tr:nth-child(even) {
|
111 |
+
background-color: #f2f2f2;
|
112 |
+
}
|
113 |
+
|
114 |
+
#breakdown-table tbody tr:hover {
|
115 |
+
background-color: #ddd;
|
116 |
+
}
|
117 |
+
|
118 |
+
|
119 |
+
#clear-btn {
|
120 |
+
background-color: #d3d5d6;
|
121 |
+
color: rgb(32, 31, 31);
|
122 |
+
border: 2px;
|
123 |
+
border-radius: 5px;
|
124 |
+
padding: 10px;
|
125 |
+
cursor: pointer;
|
126 |
+
}
|
127 |
+
|
128 |
+
#breakdown-btn {
|
129 |
+
background-color: #2f3030;
|
130 |
+
color: white;
|
131 |
+
border: none;
|
132 |
+
border-radius: 5px;
|
133 |
+
padding: 10px;
|
134 |
+
cursor: pointer;
|
135 |
+
/* Added these 2 lines to make button appear at btm-right of user story contents.
|
136 |
+
Not sure if this is the correct way to do it, but it looks alright for me? */
|
137 |
+
position: absolute;
|
138 |
+
left: 1750px;
|
139 |
+
}
|
140 |
+
|
141 |
+
.user-story-list {
|
142 |
+
flex-basis: 60%;
|
143 |
+
margin-right: 20px;
|
144 |
+
}
|
145 |
+
|
146 |
+
.user-story-list h2 {
|
147 |
+
margin-bottom: 10px;
|
148 |
+
}
|
149 |
+
|
150 |
+
.scrollable-box {
|
151 |
+
height: 200px;
|
152 |
+
overflow-y: auto;
|
153 |
+
border: 1px solid #ccc;
|
154 |
+
border-radius: 5px;
|
155 |
+
resize: none;
|
156 |
+
}
|
157 |
+
|
158 |
+
#user-story-ul {
|
159 |
+
list-style: none;
|
160 |
+
padding: 10px;
|
161 |
+
}
|
162 |
+
|
163 |
+
.back-Btn-Container {
|
164 |
+
display: flex;
|
165 |
+
justify-content: end;
|
166 |
+
align-items: end;
|
167 |
+
padding: 0 20px;
|
168 |
+
margin-top: 20px;
|
169 |
+
}
|
170 |
+
|
171 |
+
.buttons-container {
|
172 |
+
display: flex;
|
173 |
+
justify-content: space-between;
|
174 |
+
align-items: center;
|
175 |
+
padding: 0 20px;
|
176 |
+
margin-top: 20px;
|
177 |
+
}
|
178 |
+
|
179 |
+
.back-btn {
|
180 |
+
background-color: #555;
|
181 |
+
color: #fff;
|
182 |
+
padding: 10px 20px;
|
183 |
+
border: none;
|
184 |
+
border-radius: 5px;
|
185 |
+
font-size: 16px;
|
186 |
+
cursor: pointer;
|
187 |
+
margin-right: 150px;
|
188 |
+
width: 110px;
|
189 |
+
height: 40px;
|
190 |
+
}
|
static/SummarizationTable.css
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body{
|
2 |
+
background-image:url("../static/Images/Background.jpg");
|
3 |
+
background-repeat: no-repeat;
|
4 |
+
background-size: cover;
|
5 |
+
}
|
6 |
+
#summarization-table {
|
7 |
+
width: 100%;
|
8 |
+
}
|
9 |
+
|
10 |
+
#summarization-table th,
|
11 |
+
#summarization-table td {
|
12 |
+
border: 1px solid #ddd;
|
13 |
+
padding: 8px;
|
14 |
+
text-align: left;
|
15 |
+
}
|
16 |
+
|
17 |
+
#summarization-table th:first-child {
|
18 |
+
border-left: none;
|
19 |
+
}
|
20 |
+
|
21 |
+
#summarization-table th:last-child {
|
22 |
+
border-right: none;
|
23 |
+
}
|
24 |
+
|
25 |
+
#summarization-table th:not(:first-child) {
|
26 |
+
border-left: none;
|
27 |
+
border-right: none;
|
28 |
+
}
|
29 |
+
|
30 |
+
#summarization-table th div {
|
31 |
+
border-bottom: 1px solid #ddd;
|
32 |
+
padding: 8px;
|
33 |
+
}
|
34 |
+
|
35 |
+
#summarization-table td div {
|
36 |
+
padding: 8px;
|
37 |
+
}
|
38 |
+
|
39 |
+
#summarization-table thead th {
|
40 |
+
background-color: #f2f2f2;
|
41 |
+
}
|
42 |
+
|
43 |
+
#summarization-table tbody tr:nth-child(even) {
|
44 |
+
background-color: #f2f2f2;
|
45 |
+
}
|
46 |
+
|
47 |
+
#summarization-table tbody tr:hover {
|
48 |
+
background-color: #ddd;
|
49 |
+
}
|
static/TextGeneration.css
ADDED
@@ -0,0 +1,317 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body{
|
2 |
+
background-image:url("../static/Images/Background.jpg");
|
3 |
+
background-repeat: no-repeat;
|
4 |
+
background-size: cover;
|
5 |
+
}
|
6 |
+
:root {
|
7 |
+
--dl-color-gray-500: #595959;
|
8 |
+
--dl-color-gray-700: #999999;
|
9 |
+
--dl-color-gray-900: #d9d9d9;
|
10 |
+
--dl-size-size-large: 144px;
|
11 |
+
--dl-size-size-small: 48px;
|
12 |
+
--dl-color-danger-300: #a22020;
|
13 |
+
--dl-color-danger-500: #bf2626;
|
14 |
+
--dl-color-danger-700: #e14747;
|
15 |
+
--dl-color-gray-black: #000000;
|
16 |
+
--dl-color-gray-white: #ffffff;
|
17 |
+
--dl-size-size-medium: 96px;
|
18 |
+
--dl-size-size-xlarge: 192px;
|
19 |
+
--dl-size-size-xsmall: 16px;
|
20 |
+
--dl-space-space-unit: 16px;
|
21 |
+
--dl-color-primary-100: #003eb3;
|
22 |
+
--dl-color-primary-300: #0074f0;
|
23 |
+
--dl-color-primary-500: #14a9ff;
|
24 |
+
--dl-color-primary-700: #85dcff;
|
25 |
+
--dl-color-success-300: #199033;
|
26 |
+
--dl-color-success-500: #32a94c;
|
27 |
+
--dl-color-success-700: #4cc366;
|
28 |
+
--dl-size-size-xxlarge: 288px;
|
29 |
+
--dl-size-size-maxwidth: 1400px;
|
30 |
+
--dl-radius-radius-round: 50%;
|
31 |
+
--dl-space-space-halfunit: 8px;
|
32 |
+
--dl-space-space-sixunits: 96px;
|
33 |
+
--dl-space-space-twounits: 32px;
|
34 |
+
--dl-radius-radius-radius2: 2px;
|
35 |
+
--dl-radius-radius-radius4: 4px;
|
36 |
+
--dl-radius-radius-radius8: 8px;
|
37 |
+
--dl-space-space-fiveunits: 80px;
|
38 |
+
--dl-space-space-fourunits: 64px;
|
39 |
+
--dl-space-space-threeunits: 48px;
|
40 |
+
--dl-space-space-oneandhalfunits: 24px;
|
41 |
+
}
|
42 |
+
.button {
|
43 |
+
color: var(--dl-color-gray-black);
|
44 |
+
display: inline-block;
|
45 |
+
padding: 0.5rem 1rem;
|
46 |
+
border-color: var(--dl-color-gray-black);
|
47 |
+
border-width: 1px;
|
48 |
+
border-radius: 4px;
|
49 |
+
background-color: var(--dl-color-gray-white);
|
50 |
+
}
|
51 |
+
.input {
|
52 |
+
color: var(--dl-color-gray-black);
|
53 |
+
cursor: auto;
|
54 |
+
padding: 0.5rem 1rem;
|
55 |
+
border-color: var(--dl-color-gray-black);
|
56 |
+
border-width: 1px;
|
57 |
+
border-radius: 4px;
|
58 |
+
background-color: var(--dl-color-gray-white);
|
59 |
+
}
|
60 |
+
.textarea {
|
61 |
+
color: var(--dl-color-gray-black);
|
62 |
+
cursor: auto;
|
63 |
+
padding: 0.5rem;
|
64 |
+
border-color: var(--dl-color-gray-black);
|
65 |
+
border-width: 1px;
|
66 |
+
border-radius: 4px;
|
67 |
+
background-color: var(--dl-color-gray-white);
|
68 |
+
}
|
69 |
+
.list {
|
70 |
+
width: 100%;
|
71 |
+
margin: 1em 0px 1em 0px;
|
72 |
+
display: block;
|
73 |
+
padding: 0px 0px 0px 1.5rem;
|
74 |
+
list-style-type: none;
|
75 |
+
list-style-position: outside;
|
76 |
+
}
|
77 |
+
.list-item {
|
78 |
+
display: list-item;
|
79 |
+
}
|
80 |
+
.teleport-show {
|
81 |
+
display: flex !important;
|
82 |
+
transform: none !important;
|
83 |
+
}
|
84 |
+
.Heading {
|
85 |
+
font-size: 32px;
|
86 |
+
font-family: Inter;
|
87 |
+
font-weight: 700;
|
88 |
+
line-height: 1.15;
|
89 |
+
text-transform: none;
|
90 |
+
text-decoration: none;
|
91 |
+
}
|
92 |
+
.Content {
|
93 |
+
font-size: 16px;
|
94 |
+
font-family: Inter;
|
95 |
+
font-weight: 400;
|
96 |
+
line-height: 1.15;
|
97 |
+
text-transform: none;
|
98 |
+
text-decoration: none;
|
99 |
+
}
|
100 |
+
|
101 |
+
body {
|
102 |
+
margin: 0;
|
103 |
+
padding: 0;
|
104 |
+
font-family: Arial, sans-serif;
|
105 |
+
}
|
106 |
+
|
107 |
+
.container {
|
108 |
+
white-space: nowrap;
|
109 |
+
display: flex;
|
110 |
+
align-items: center;
|
111 |
+
justify-content: center;
|
112 |
+
max-width: 1000px;
|
113 |
+
margin: auto;
|
114 |
+
margin-top: 0px;
|
115 |
+
overflow: hidden;
|
116 |
+
margin-top: 50px;
|
117 |
+
|
118 |
+
}
|
119 |
+
|
120 |
+
.box {
|
121 |
+
height: 500px;
|
122 |
+
width: 570px;
|
123 |
+
background-color: #f2f2f2;
|
124 |
+
overflow-y: scroll;
|
125 |
+
border: 1px solid gray;
|
126 |
+
display: inline-block;
|
127 |
+
border-radius: 6px;
|
128 |
+
}
|
129 |
+
.box1 {
|
130 |
+
height: 500px;
|
131 |
+
width: 570px;
|
132 |
+
background-color: #f2f2f2;
|
133 |
+
overflow-y: scroll;
|
134 |
+
border: 1px solid gray;
|
135 |
+
display: inline-block;
|
136 |
+
border-radius: 6px;
|
137 |
+
}
|
138 |
+
.box::-webkit-scrollbar {
|
139 |
+
width: 10px;
|
140 |
+
height: 10px;
|
141 |
+
}
|
142 |
+
|
143 |
+
.box::-webkit-scrollbar-track {
|
144 |
+
background-color: #f2f2f2;
|
145 |
+
}
|
146 |
+
|
147 |
+
.box::-webkit-scrollbar-thumb {
|
148 |
+
background-color: #888;
|
149 |
+
border-radius: 5px;
|
150 |
+
}
|
151 |
+
|
152 |
+
.box::-webkit-scrollbar-thumb:hover {
|
153 |
+
background-color: #555;
|
154 |
+
}
|
155 |
+
.box1::-webkit-scrollbar {
|
156 |
+
width: 10px;
|
157 |
+
height: 10px;
|
158 |
+
}
|
159 |
+
|
160 |
+
.box1::-webkit-scrollbar-track {
|
161 |
+
background-color: #f2f2f2;
|
162 |
+
}
|
163 |
+
|
164 |
+
.box1::-webkit-scrollbar-thumb {
|
165 |
+
background-color: #888;
|
166 |
+
border-radius: 5px;
|
167 |
+
}
|
168 |
+
|
169 |
+
.box1::-webkit-scrollbar-thumb:hover {
|
170 |
+
background-color: #555;
|
171 |
+
}
|
172 |
+
.textarea {
|
173 |
+
height: 100%;
|
174 |
+
width: 100%;
|
175 |
+
padding: 10px;
|
176 |
+
box-sizing: border-box;
|
177 |
+
border: none;
|
178 |
+
font-size: 16px;
|
179 |
+
resize: none;
|
180 |
+
}
|
181 |
+
.textarea1 {
|
182 |
+
height: 100%;
|
183 |
+
width: 100%;
|
184 |
+
padding: 10px;
|
185 |
+
box-sizing: border-box;
|
186 |
+
border: none;
|
187 |
+
font-size: 16px;
|
188 |
+
resize: none;
|
189 |
+
}
|
190 |
+
.title {
|
191 |
+
text-align: center;
|
192 |
+
padding: 20px;
|
193 |
+
font-size: 62px;
|
194 |
+
font-weight: bold;
|
195 |
+
color: rgb(10, 10, 10);
|
196 |
+
}
|
197 |
+
|
198 |
+
.message {
|
199 |
+
text-align: center;
|
200 |
+
padding: 0px;
|
201 |
+
font-size: 24px;
|
202 |
+
color: rgb(92, 88, 88);
|
203 |
+
margin-top: -30px;
|
204 |
+
}
|
205 |
+
|
206 |
+
.logo {
|
207 |
+
height: 250px;
|
208 |
+
width: 250px;
|
209 |
+
margin-right: 150px;
|
210 |
+
|
211 |
+
|
212 |
+
}
|
213 |
+
.home-image {
|
214 |
+
max-width: 100%;
|
215 |
+
max-height: 100%;
|
216 |
+
}
|
217 |
+
|
218 |
+
|
219 |
+
.ClearBtn {
|
220 |
+
display: flex;
|
221 |
+
justify-content: center;
|
222 |
+
align-items: center;
|
223 |
+
background-color: whitesmoke;
|
224 |
+
color: black;
|
225 |
+
padding: 20px 30px;
|
226 |
+
border: none;
|
227 |
+
border-radius: 5px;
|
228 |
+
font-size: 20px;
|
229 |
+
cursor: pointer;
|
230 |
+
margin-left:-20px;
|
231 |
+
width: 110px;
|
232 |
+
height: 40px;
|
233 |
+
border: 1px solid black;
|
234 |
+
margin-left: 0px;
|
235 |
+
display: flex;
|
236 |
+
justify-content: center;
|
237 |
+
align-items: center;
|
238 |
+
text-align: center;
|
239 |
+
margin-top: 15px;
|
240 |
+
|
241 |
+
}
|
242 |
+
.ViewBtn {
|
243 |
+
width: 150px;
|
244 |
+
height: 40px;
|
245 |
+
display: flex;
|
246 |
+
justify-content: center;
|
247 |
+
align-items: center;
|
248 |
+
background-color: #555;
|
249 |
+
color: #fff;
|
250 |
+
padding: 20px 30px;
|
251 |
+
border: none;
|
252 |
+
border-radius: 5px;
|
253 |
+
font-size: 20px;
|
254 |
+
cursor: pointer;
|
255 |
+
display: flex;
|
256 |
+
justify-content: center;
|
257 |
+
align-items: center;
|
258 |
+
text-align: center;
|
259 |
+
margin-left: 800px;
|
260 |
+
margin-top: -40px;
|
261 |
+
margin-right:-20px;
|
262 |
+
width: 150px;
|
263 |
+
height: 40px;
|
264 |
+
}
|
265 |
+
.GenerateBtn {
|
266 |
+
width: 150px;
|
267 |
+
height: 40px;
|
268 |
+
display: flex;
|
269 |
+
justify-content: center;
|
270 |
+
align-items: center;
|
271 |
+
background-color: #555;
|
272 |
+
color: #fff;
|
273 |
+
padding: 20px 30px;
|
274 |
+
border: none;
|
275 |
+
border-radius: 5px;
|
276 |
+
font-size: 20px;
|
277 |
+
cursor: pointer;
|
278 |
+
display: flex;
|
279 |
+
justify-content: center;
|
280 |
+
align-items: center;
|
281 |
+
text-align: center;
|
282 |
+
margin-left: 1000px;
|
283 |
+
margin-top: -40px;
|
284 |
+
margin-right:-20px;
|
285 |
+
width: 150px;
|
286 |
+
height: 40px;
|
287 |
+
}
|
288 |
+
|
289 |
+
.BackBtnContainer {
|
290 |
+
display: flex;
|
291 |
+
justify-content: end;
|
292 |
+
align-items: end;
|
293 |
+
padding: 0 20px;
|
294 |
+
margin-top: 20px;
|
295 |
+
}
|
296 |
+
|
297 |
+
.BackBtn {
|
298 |
+
background-color: #555;
|
299 |
+
color: #fff;
|
300 |
+
padding: 10px 20px;
|
301 |
+
border: none;
|
302 |
+
border-radius: 5px;
|
303 |
+
font-size: 16px;
|
304 |
+
cursor: pointer;
|
305 |
+
margin-right: 150px;
|
306 |
+
width: 110px;
|
307 |
+
height: 40px;
|
308 |
+
}
|
309 |
+
|
310 |
+
@media screen and (max-width: 600px) {
|
311 |
+
.box {
|
312 |
+
height: 400px;
|
313 |
+
width: 90%;
|
314 |
+
margin: 10px auto;
|
315 |
+
}
|
316 |
+
}
|
317 |
+
|
static/TextSummarization.css
ADDED
@@ -0,0 +1,316 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body{
|
2 |
+
background-image:url("../static/Images/Background.jpg");
|
3 |
+
background-repeat: no-repeat;
|
4 |
+
background-size: cover;
|
5 |
+
}
|
6 |
+
:root {
|
7 |
+
--dl-color-gray-500: #595959;
|
8 |
+
--dl-color-gray-700: #999999;
|
9 |
+
--dl-color-gray-900: #d9d9d9;
|
10 |
+
--dl-size-size-large: 144px;
|
11 |
+
--dl-size-size-small: 48px;
|
12 |
+
--dl-color-danger-300: #a22020;
|
13 |
+
--dl-color-danger-500: #bf2626;
|
14 |
+
--dl-color-danger-700: #e14747;
|
15 |
+
--dl-color-gray-black: #000000;
|
16 |
+
--dl-color-gray-white: #ffffff;
|
17 |
+
--dl-size-size-medium: 96px;
|
18 |
+
--dl-size-size-xlarge: 192px;
|
19 |
+
--dl-size-size-xsmall: 16px;
|
20 |
+
--dl-space-space-unit: 16px;
|
21 |
+
--dl-color-primary-100: #003eb3;
|
22 |
+
--dl-color-primary-300: #0074f0;
|
23 |
+
--dl-color-primary-500: #14a9ff;
|
24 |
+
--dl-color-primary-700: #85dcff;
|
25 |
+
--dl-color-success-300: #199033;
|
26 |
+
--dl-color-success-500: #32a94c;
|
27 |
+
--dl-color-success-700: #4cc366;
|
28 |
+
--dl-size-size-xxlarge: 288px;
|
29 |
+
--dl-size-size-maxwidth: 1400px;
|
30 |
+
--dl-radius-radius-round: 50%;
|
31 |
+
--dl-space-space-halfunit: 8px;
|
32 |
+
--dl-space-space-sixunits: 96px;
|
33 |
+
--dl-space-space-twounits: 32px;
|
34 |
+
--dl-radius-radius-radius2: 2px;
|
35 |
+
--dl-radius-radius-radius4: 4px;
|
36 |
+
--dl-radius-radius-radius8: 8px;
|
37 |
+
--dl-space-space-fiveunits: 80px;
|
38 |
+
--dl-space-space-fourunits: 64px;
|
39 |
+
--dl-space-space-threeunits: 48px;
|
40 |
+
--dl-space-space-oneandhalfunits: 24px;
|
41 |
+
}
|
42 |
+
.button {
|
43 |
+
color: var(--dl-color-gray-black);
|
44 |
+
display: inline-block;
|
45 |
+
padding: 0.5rem 1rem;
|
46 |
+
border-color: var(--dl-color-gray-black);
|
47 |
+
border-width: 1px;
|
48 |
+
border-radius: 4px;
|
49 |
+
background-color: var(--dl-color-gray-white);
|
50 |
+
}
|
51 |
+
.input {
|
52 |
+
color: var(--dl-color-gray-black);
|
53 |
+
cursor: auto;
|
54 |
+
padding: 0.5rem 1rem;
|
55 |
+
border-color: var(--dl-color-gray-black);
|
56 |
+
border-width: 1px;
|
57 |
+
border-radius: 4px;
|
58 |
+
background-color: var(--dl-color-gray-white);
|
59 |
+
}
|
60 |
+
.textarea {
|
61 |
+
color: var(--dl-color-gray-black);
|
62 |
+
cursor: auto;
|
63 |
+
padding: 0.5rem;
|
64 |
+
border-color: var(--dl-color-gray-black);
|
65 |
+
border-width: 1px;
|
66 |
+
border-radius: 4px;
|
67 |
+
background-color: var(--dl-color-gray-white);
|
68 |
+
}
|
69 |
+
.list {
|
70 |
+
width: 100%;
|
71 |
+
margin: 1em 0px 1em 0px;
|
72 |
+
display: block;
|
73 |
+
padding: 0px 0px 0px 1.5rem;
|
74 |
+
list-style-type: none;
|
75 |
+
list-style-position: outside;
|
76 |
+
}
|
77 |
+
.list-item {
|
78 |
+
display: list-item;
|
79 |
+
}
|
80 |
+
.teleport-show {
|
81 |
+
display: flex !important;
|
82 |
+
transform: none !important;
|
83 |
+
}
|
84 |
+
.Heading {
|
85 |
+
font-size: 32px;
|
86 |
+
font-family: Inter;
|
87 |
+
font-weight: 700;
|
88 |
+
line-height: 1.15;
|
89 |
+
text-transform: none;
|
90 |
+
text-decoration: none;
|
91 |
+
}
|
92 |
+
.Content {
|
93 |
+
font-size: 16px;
|
94 |
+
font-family: Inter;
|
95 |
+
font-weight: 400;
|
96 |
+
line-height: 1.15;
|
97 |
+
text-transform: none;
|
98 |
+
text-decoration: none;
|
99 |
+
}
|
100 |
+
|
101 |
+
body {
|
102 |
+
margin: 0;
|
103 |
+
padding: 0;
|
104 |
+
font-family: Arial, sans-serif;
|
105 |
+
}
|
106 |
+
|
107 |
+
.container {
|
108 |
+
white-space: nowrap;
|
109 |
+
display: flex;
|
110 |
+
align-items: center;
|
111 |
+
justify-content: center;
|
112 |
+
max-width: 1000px;
|
113 |
+
margin: auto;
|
114 |
+
margin-top: 0px;
|
115 |
+
overflow: hidden;
|
116 |
+
margin-top: 50px;
|
117 |
+
|
118 |
+
}
|
119 |
+
|
120 |
+
.box {
|
121 |
+
height: 500px;
|
122 |
+
width: 570px;
|
123 |
+
background-color: #f2f2f2;
|
124 |
+
overflow-y: scroll;
|
125 |
+
border: 1px solid gray;
|
126 |
+
display: inline-block;
|
127 |
+
border-radius: 6px;
|
128 |
+
}
|
129 |
+
.box1 {
|
130 |
+
height: 500px;
|
131 |
+
width: 570px;
|
132 |
+
background-color: #f2f2f2;
|
133 |
+
overflow-y: scroll;
|
134 |
+
border: 1px solid gray;
|
135 |
+
display: inline-block;
|
136 |
+
border-radius: 6px;
|
137 |
+
}
|
138 |
+
.box::-webkit-scrollbar {
|
139 |
+
width: 10px;
|
140 |
+
height: 10px;
|
141 |
+
}
|
142 |
+
|
143 |
+
.box::-webkit-scrollbar-track {
|
144 |
+
background-color: #f2f2f2;
|
145 |
+
}
|
146 |
+
|
147 |
+
.box::-webkit-scrollbar-thumb {
|
148 |
+
background-color: #888;
|
149 |
+
border-radius: 5px;
|
150 |
+
}
|
151 |
+
|
152 |
+
.box::-webkit-scrollbar-thumb:hover {
|
153 |
+
background-color: #555;
|
154 |
+
}
|
155 |
+
.box1::-webkit-scrollbar {
|
156 |
+
width: 10px;
|
157 |
+
height: 10px;
|
158 |
+
}
|
159 |
+
|
160 |
+
.box1::-webkit-scrollbar-track {
|
161 |
+
background-color: #f2f2f2;
|
162 |
+
}
|
163 |
+
|
164 |
+
.box1::-webkit-scrollbar-thumb {
|
165 |
+
background-color: #888;
|
166 |
+
border-radius: 5px;
|
167 |
+
}
|
168 |
+
|
169 |
+
.box1::-webkit-scrollbar-thumb:hover {
|
170 |
+
background-color: #555;
|
171 |
+
}
|
172 |
+
.textarea {
|
173 |
+
height: 100%;
|
174 |
+
width: 100%;
|
175 |
+
padding: 10px;
|
176 |
+
box-sizing: border-box;
|
177 |
+
border: none;
|
178 |
+
font-size: 16px;
|
179 |
+
resize: none;
|
180 |
+
}
|
181 |
+
.textarea1 {
|
182 |
+
height: 100%;
|
183 |
+
width: 100%;
|
184 |
+
padding: 10px;
|
185 |
+
box-sizing: border-box;
|
186 |
+
border: none;
|
187 |
+
font-size: 16px;
|
188 |
+
resize: none;
|
189 |
+
}
|
190 |
+
.title {
|
191 |
+
text-align: center;
|
192 |
+
padding: 20px;
|
193 |
+
font-size: 62px;
|
194 |
+
font-weight: bold;
|
195 |
+
color: rgb(15, 15, 15);
|
196 |
+
}
|
197 |
+
|
198 |
+
.message {
|
199 |
+
text-align: center;
|
200 |
+
padding: 0px;
|
201 |
+
font-size: 24px;
|
202 |
+
color: rgb(92, 88, 88);
|
203 |
+
margin-top: -30px;
|
204 |
+
}
|
205 |
+
|
206 |
+
.logo {
|
207 |
+
height: 250px;
|
208 |
+
width: 250px;
|
209 |
+
margin-right: 150px;
|
210 |
+
|
211 |
+
|
212 |
+
}
|
213 |
+
.home-image {
|
214 |
+
max-width: 100%;
|
215 |
+
max-height: 100%;
|
216 |
+
}
|
217 |
+
|
218 |
+
|
219 |
+
.ClearBtn {
|
220 |
+
display: flex;
|
221 |
+
justify-content: center;
|
222 |
+
align-items: center;
|
223 |
+
background-color: whitesmoke;
|
224 |
+
color: black;
|
225 |
+
padding: 20px 30px;
|
226 |
+
border: none;
|
227 |
+
border-radius: 5px;
|
228 |
+
font-size: 20px;
|
229 |
+
cursor: pointer;
|
230 |
+
margin-left:-20px;
|
231 |
+
width: 110px;
|
232 |
+
height: 40px;
|
233 |
+
border: 1px solid black;
|
234 |
+
margin-left: 0px;
|
235 |
+
display: flex;
|
236 |
+
justify-content: center;
|
237 |
+
align-items: center;
|
238 |
+
text-align: center;
|
239 |
+
margin-top: 15px;
|
240 |
+
|
241 |
+
}
|
242 |
+
.ViewBtn {
|
243 |
+
width: 150px;
|
244 |
+
height: 40px;
|
245 |
+
display: flex;
|
246 |
+
justify-content: center;
|
247 |
+
align-items: center;
|
248 |
+
background-color: #555;
|
249 |
+
color: #fff;
|
250 |
+
padding: 20px 30px;
|
251 |
+
border: none;
|
252 |
+
border-radius: 5px;
|
253 |
+
font-size: 20px;
|
254 |
+
cursor: pointer;
|
255 |
+
display: flex;
|
256 |
+
justify-content: center;
|
257 |
+
align-items: center;
|
258 |
+
text-align: center;
|
259 |
+
margin-left: 800px;
|
260 |
+
margin-top: -40px;
|
261 |
+
margin-right:-20px;
|
262 |
+
width: 150px;
|
263 |
+
height: 40px;
|
264 |
+
}
|
265 |
+
.SummarizeBtn {
|
266 |
+
width: 150px;
|
267 |
+
height: 40px;
|
268 |
+
display: flex;
|
269 |
+
justify-content: center;
|
270 |
+
align-items: center;
|
271 |
+
background-color: #555;
|
272 |
+
color: #fff;
|
273 |
+
padding: 20px 30px;
|
274 |
+
border: none;
|
275 |
+
border-radius: 5px;
|
276 |
+
font-size: 20px;
|
277 |
+
cursor: pointer;
|
278 |
+
display: flex;
|
279 |
+
justify-content: center;
|
280 |
+
align-items: center;
|
281 |
+
text-align: center;
|
282 |
+
margin-left: 1000px;
|
283 |
+
margin-top: -40px;
|
284 |
+
margin-right:-20px;
|
285 |
+
width: 150px;
|
286 |
+
height: 40px;
|
287 |
+
}
|
288 |
+
|
289 |
+
.BackBtnContainer {
|
290 |
+
display: flex;
|
291 |
+
justify-content: end;
|
292 |
+
align-items: end;
|
293 |
+
padding: 0 20px;
|
294 |
+
margin-top: 20px;
|
295 |
+
}
|
296 |
+
|
297 |
+
.BackBtn {
|
298 |
+
background-color: #555;
|
299 |
+
color: #fff;
|
300 |
+
padding: 10px 20px;
|
301 |
+
border: none;
|
302 |
+
border-radius: 5px;
|
303 |
+
font-size: 16px;
|
304 |
+
cursor: pointer;
|
305 |
+
margin-right: 150px;
|
306 |
+
width: 110px;
|
307 |
+
height: 40px;
|
308 |
+
}
|
309 |
+
|
310 |
+
@media screen and (max-width: 600px) {
|
311 |
+
.box {
|
312 |
+
height: 400px;
|
313 |
+
width: 90%;
|
314 |
+
margin: 10px auto;
|
315 |
+
}
|
316 |
+
}
|
static/Translation.css
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
body{
|
2 |
+
background-image:url("../static/Images/Background.jpg");
|
3 |
+
background-repeat: no-repeat;
|
4 |
+
background-size: cover;
|
5 |
+
}
|
6 |
+
.k{
|
7 |
+
display:flex;
|
8 |
+
flex-direction: row;
|
9 |
+
margin-top: 30px;
|
10 |
+
}
|
11 |
+
.k img{
|
12 |
+
position:relative ;
|
13 |
+
height: 250px;
|
14 |
+
width: 250px;
|
15 |
+
margin-left: 280px;
|
16 |
+
}
|
17 |
+
.kk{
|
18 |
+
position: relative;
|
19 |
+
line-height: 0;
|
20 |
+
display:flex;
|
21 |
+
flex-direction: column;
|
22 |
+
margin-left: 100px;
|
23 |
+
margin-top: 50px;
|
24 |
+
color:rgb(17, 17, 17)
|
25 |
+
}
|
26 |
+
.kk h1{
|
27 |
+
font-size: 65px;
|
28 |
+
white-space: nowrap;
|
29 |
+
}
|
30 |
+
.kk h5{
|
31 |
+
margin-top: 12px;
|
32 |
+
font-size: 24px;
|
33 |
+
font-weight: 500;
|
34 |
+
white-space: nowrap;
|
35 |
+
}
|
36 |
+
#lan{
|
37 |
+
border-radius: 5px;
|
38 |
+
margin-top: 10px;
|
39 |
+
width: 350px;
|
40 |
+
height: 45px;
|
41 |
+
font-size: 25px;
|
42 |
+
color: rgb(108, 108, 109);
|
43 |
+
}
|
44 |
+
.kkk{
|
45 |
+
position:absolute;
|
46 |
+
display: flex;
|
47 |
+
flex-direction:row;
|
48 |
+
margin-top: 150px;
|
49 |
+
}
|
50 |
+
#type{
|
51 |
+
|
52 |
+
font-size: 20px;
|
53 |
+
position: relative;
|
54 |
+
resize: none;
|
55 |
+
width: 550px;
|
56 |
+
height: 350px;
|
57 |
+
margin-left: 400px;
|
58 |
+
overflow-y: scroll;
|
59 |
+
}
|
60 |
+
#out{
|
61 |
+
font-size: 20px;
|
62 |
+
position: relative;
|
63 |
+
resize:none;
|
64 |
+
width:550px;
|
65 |
+
height: 350px;
|
66 |
+
margin-left: 0px;
|
67 |
+
overflow-y: scroll;
|
68 |
+
}
|
69 |
+
.kkkk {
|
70 |
+
display: flex;}
|
71 |
+
#clear{
|
72 |
+
background-color: rgb(244, 244, 245);
|
73 |
+
font-size: 20px;
|
74 |
+
margin-top: 550px;
|
75 |
+
width: 180px;
|
76 |
+
height: 50px;
|
77 |
+
border-radius: 5px;
|
78 |
+
margin-left: 400px;
|
79 |
+
}
|
80 |
+
#example{
|
81 |
+
background-color: rgb(244, 244, 245);
|
82 |
+
font-size: 20px;
|
83 |
+
margin-top: 550px;
|
84 |
+
width: 180px;
|
85 |
+
height: 50px;
|
86 |
+
border-radius: 5px;
|
87 |
+
margin-left: 50px;
|
88 |
+
}
|
89 |
+
#viewData{
|
90 |
+
color: aliceblue;
|
91 |
+
background-color: rgb(85, 81, 81);
|
92 |
+
font-size: 20px;
|
93 |
+
margin-top: 0px;
|
94 |
+
width: 180px;
|
95 |
+
height: 50px;
|
96 |
+
border-radius: 5px;
|
97 |
+
margin-left: 280px;
|
98 |
+
margin-top: 550px;
|
99 |
+
}
|
100 |
+
#translate{
|
101 |
+
color: aliceblue;
|
102 |
+
background-color: rgb(85, 81, 81);
|
103 |
+
font-size: 20px;
|
104 |
+
margin-top: 0px;
|
105 |
+
width: 180px;
|
106 |
+
height: 50px;
|
107 |
+
border-radius: 5px;
|
108 |
+
margin-left: 50px;
|
109 |
+
margin-top: 550px;
|
110 |
+
}
|
111 |
+
.backb{
|
112 |
+
position: relative;
|
113 |
+
display: inline-block;
|
114 |
+
background-color: rgb(53, 57, 66);
|
115 |
+
color: white;
|
116 |
+
padding: 9px 30px;
|
117 |
+
text-align: center;
|
118 |
+
text-decoration: none;
|
119 |
+
font-size: 15px;
|
120 |
+
cursor: pointer;
|
121 |
+
border: none;
|
122 |
+
border-radius: 4px;
|
123 |
+
margin-left: 1410px;
|
124 |
+
margin-top: 50px;
|
125 |
+
|
126 |
+
}
|
127 |
+
#source{
|
128 |
+
white-space: nowrap;
|
129 |
+
float: left;
|
130 |
+
margin-left: 450px;
|
131 |
+
font-size: 25px;
|
132 |
+
}
|
133 |
+
#target{
|
134 |
+
white-space: nowrap;
|
135 |
+
margin-left: 50px;
|
136 |
+
font-size: 25px;
|
137 |
+
}
|
138 |
+
form{
|
139 |
+
white-space: nowrap;
|
140 |
+
}
|
static/TranslationTable.css
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#translation-table {
|
2 |
+
width: 100%;
|
3 |
+
}
|
4 |
+
|
5 |
+
#translation-table th,
|
6 |
+
#translation-table td {
|
7 |
+
border: 1px solid #ddd;
|
8 |
+
padding: 8px;
|
9 |
+
text-align: left;
|
10 |
+
}
|
11 |
+
|
12 |
+
#translation-table th:first-child {
|
13 |
+
border-left: none;
|
14 |
+
}
|
15 |
+
|
16 |
+
#translation-table th:last-child {
|
17 |
+
border-right: none;
|
18 |
+
}
|
19 |
+
|
20 |
+
#translation-table th:not(:first-child) {
|
21 |
+
border-left: none;
|
22 |
+
border-right: none;
|
23 |
+
}
|
24 |
+
|
25 |
+
#translation-table th div {
|
26 |
+
border-bottom: 1px solid #ddd;
|
27 |
+
padding: 8px;
|
28 |
+
}
|
29 |
+
|
30 |
+
#translation-table td div {
|
31 |
+
padding: 8px;
|
32 |
+
}
|
33 |
+
|
34 |
+
#translation-table thead th {
|
35 |
+
background-color: #f2f2f2;
|
36 |
+
}
|
37 |
+
|
38 |
+
#translation-table tbody tr:nth-child(even) {
|
39 |
+
background-color: #f2f2f2;
|
40 |
+
}
|
41 |
+
|
42 |
+
#translation-table tbody tr:hover {
|
43 |
+
background-color: #ddd;
|
44 |
+
}
|
static/atlassian-connect.json
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "Refineverse",
|
3 |
+
"description": "User Story Refinement Plugin",
|
4 |
+
"key": "com.example.myapp",
|
5 |
+
"baseUrl": "https://huggingface.co/spaces/Nik97/Refineverse",
|
6 |
+
"vendor": {
|
7 |
+
"name": "Example, Inc.",
|
8 |
+
"url": "http://example.com"
|
9 |
+
},
|
10 |
+
"authentication": {
|
11 |
+
"type": "none"
|
12 |
+
},
|
13 |
+
"apiVersion": 1,
|
14 |
+
"modules": {
|
15 |
+
"generalPages": [
|
16 |
+
{
|
17 |
+
"url": "/RefineverseDashboardUI.html",
|
18 |
+
"key": "Refineverse-plugin",
|
19 |
+
"location": "system.top.navigation.bar",
|
20 |
+
"name": {
|
21 |
+
"value": "Refineverse"
|
22 |
+
}
|
23 |
+
}
|
24 |
+
]
|
25 |
+
}
|
26 |
+
}
|
templates/GenerationTable.html
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Generation Data</title>
|
5 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='GenerationTable.css') }}">
|
6 |
+
</head>
|
7 |
+
<body>
|
8 |
+
<table id="generation-table">
|
9 |
+
<thead>
|
10 |
+
<tr>
|
11 |
+
<th onclick="sortTable(0)">User Story</th>
|
12 |
+
<th onclick="sortTable(1)">Generated Story</th>
|
13 |
+
</tr>
|
14 |
+
</thead>
|
15 |
+
<tbody>
|
16 |
+
<!-- Use Jinja templates to grab all data from the generation table -->
|
17 |
+
{% for generation in generations %}
|
18 |
+
<tr>
|
19 |
+
<td>{{ generation[0] }}</td>
|
20 |
+
<td>{{ generation[1] }}</td>
|
21 |
+
</tr>
|
22 |
+
{% endfor %}
|
23 |
+
</tbody>
|
24 |
+
</table>
|
25 |
+
|
26 |
+
<script>
|
27 |
+
// Function to sort the table via its headers in asc/des order
|
28 |
+
function sortTable(columnIndex) {
|
29 |
+
// Initialize variables
|
30 |
+
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
|
31 |
+
table = document.getElementById("generation-table");
|
32 |
+
switching = true;
|
33 |
+
|
34 |
+
// Set the sorting direction to ascending:
|
35 |
+
dir = "asc";
|
36 |
+
// Make a loop that will continue until no switching has been done:
|
37 |
+
while (switching) {
|
38 |
+
// Start by saying: no switching is done:
|
39 |
+
switching = false;
|
40 |
+
rows = table.rows;
|
41 |
+
// Loop through all table rows (except the first, which contains table headers):
|
42 |
+
for (i = 1; i < (rows.length - 1); i++) {
|
43 |
+
// Start by saying there should be no switching:
|
44 |
+
shouldSwitch = false;
|
45 |
+
// Get the two elements you want to compare, one from current row and one from the next:
|
46 |
+
x = rows[i].getElementsByTagName("TD")[columnIndex];
|
47 |
+
y = rows[i + 1].getElementsByTagName("TD")[columnIndex];
|
48 |
+
// Check if the two rows should switch place, based on the direction, asc or desc:
|
49 |
+
if (dir == "asc") {
|
50 |
+
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
|
51 |
+
// If so, mark as a switch and break the loop:
|
52 |
+
shouldSwitch = true;
|
53 |
+
break;
|
54 |
+
}
|
55 |
+
} else if (dir == "desc") {
|
56 |
+
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
|
57 |
+
// If so, mark as a switch and break the loop:
|
58 |
+
shouldSwitch = true;
|
59 |
+
break;
|
60 |
+
}
|
61 |
+
}
|
62 |
+
}
|
63 |
+
if (shouldSwitch) {
|
64 |
+
// If a switch has been marked, make the switch and mark that a switch has been done:
|
65 |
+
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
|
66 |
+
switching = true;
|
67 |
+
// Each time a switch is done, increase this count by 1:
|
68 |
+
switchcount ++;
|
69 |
+
} else {
|
70 |
+
// If no switching has been done AND the direction is "asc", set the direction to "desc" and run the while loop again.
|
71 |
+
if (switchcount == 0 && dir == "asc") {
|
72 |
+
dir = "desc";
|
73 |
+
switching = true;
|
74 |
+
}
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
// Add arrow icons to the header cells to indicate the sort direction:
|
79 |
+
var headers = table.getElementsByTagName("TH");
|
80 |
+
for (i = 0; i < headers.length; i++) {
|
81 |
+
headers[i].innerHTML = headers[i].innerHTML.replace(/ ▲| ▼/g, "");
|
82 |
+
}
|
83 |
+
var arrow = document.createElement("span");
|
84 |
+
arrow.className = "arrow";
|
85 |
+
if (dir == "asc") {
|
86 |
+
arrow.innerHTML = " ▲";
|
87 |
+
} else {
|
88 |
+
arrow.innerHTML = " ▼";
|
89 |
+
}
|
90 |
+
headers[columnIndex].appendChild(arrow);
|
91 |
+
}
|
92 |
+
</script>
|
93 |
+
</body>
|
94 |
+
</html>
|
templates/LanguageTranslationUI.html
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<head>
|
3 |
+
<title>Language Translation</title>
|
4 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='Translation.css') }}">
|
5 |
+
<!-- Bootstrap CSS -->
|
6 |
+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
|
7 |
+
</head>
|
8 |
+
<body>
|
9 |
+
|
10 |
+
<!-- Navigation bar; To go to different pages without having to go back to index/home page -->
|
11 |
+
<nav class="navbar navbar-expand-lg bg-body-tertiary">
|
12 |
+
<div class="container-fluid">
|
13 |
+
<a class="navbar-brand" href="{{ url_for('index') }}">Home</a>
|
14 |
+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
|
15 |
+
<span class="navbar-toggler-icon"></span>
|
16 |
+
</button>
|
17 |
+
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
18 |
+
<div class="navbar-nav">
|
19 |
+
<a class="nav-link active" href="{{ url_for('text_summarization') }}">Summarization</a>
|
20 |
+
<a class="nav-link" href="{{ url_for('project_breakdown') }}">Task Breakdown</a>
|
21 |
+
<a class="nav-link" aria-current="page" href="{{ url_for('language_translation') }}">Translation</a>
|
22 |
+
<a class="nav-link" href="{{ url_for('text_generation') }}">Generation</a>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
</div>
|
26 |
+
</nav>
|
27 |
+
|
28 |
+
<div class="k">
|
29 |
+
<img src="{{ url_for('static', filename='Images/Refineverse logo.png') }}" alt="Refineverse Logo">
|
30 |
+
|
31 |
+
<div class="kk">
|
32 |
+
<h1>Language Translation</h1>
|
33 |
+
<h5>Machine Translation for your desired choice of language.</h5>
|
34 |
+
|
35 |
+
</div>
|
36 |
+
</div>
|
37 |
+
<form action="#" method="POST">
|
38 |
+
<!-- Drop-down box for source language. -->
|
39 |
+
<label for="source_language" id="source">Choose your source language:</label>
|
40 |
+
<select id="language" name="source_language">
|
41 |
+
<option value="en" selected>English</option>
|
42 |
+
<option value="zh">Chinese</option>
|
43 |
+
<option value="ms">Malay</option>
|
44 |
+
<option value="ta">Tamil</option>
|
45 |
+
<option value="th">Thai</option>
|
46 |
+
</select>
|
47 |
+
|
48 |
+
<!-- Drop-down box for target language. -->
|
49 |
+
<label for="target_language" id="target">Choose your target language:</label>
|
50 |
+
<select id="language" name="target_language">
|
51 |
+
<option value="en">English</option>
|
52 |
+
<option value="zh" selected>Chinese</option>
|
53 |
+
<option value="ms">Malay</option>
|
54 |
+
<option value="ta">Tamil</option>
|
55 |
+
<option value="th">Thai</option>
|
56 |
+
</select>
|
57 |
+
|
58 |
+
<!-- div container for input & translation textareas -->
|
59 |
+
<div class="kkk">
|
60 |
+
<textarea id="type" name="input" placeholder="Enter your user story here!">{{ input_text }}</textarea>
|
61 |
+
<textarea id="out" name="out" placeholder="Your translated user story will appear here!" readonly>{{ translatedStory }}</textarea>
|
62 |
+
</div>
|
63 |
+
|
64 |
+
<!--
|
65 |
+
Jinja template for displaying flash messages. Gets all flash messages to be displayed on page.
|
66 |
+
To note: Pay attention to the category name. It MUST match the category name given on flask-end (Refineverse.py)!
|
67 |
+
-->
|
68 |
+
{% with messages = get_flashed_messages(with_categories=true) %}
|
69 |
+
{% for category, message in messages %}
|
70 |
+
{% if category == 'error' %}
|
71 |
+
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
72 |
+
{{ message }}
|
73 |
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
74 |
+
</div>
|
75 |
+
{% else %}
|
76 |
+
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
77 |
+
{{ message }}
|
78 |
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
79 |
+
</div>
|
80 |
+
{% endif %}
|
81 |
+
{% endfor %}
|
82 |
+
{% endwith %}
|
83 |
+
|
84 |
+
<div class="kkkk">
|
85 |
+
<button id="clear" onclick="clearContent()" type="button">Clear</button>
|
86 |
+
<button id="example" type="button" data-bs-toggle="tooltip" data-bs-placement="bottom" title="As a _ , I want to _ so that _ / 作为__ , 我想要__以便__。 / Sebagai__, saya mahu__supaya__. / என__, எனக்கு வேண்டும்__அதனால்__. / ในฐานะ__, ฉันต้องการ__เพื่อที่ฉัน__.">Example Formats</button>
|
87 |
+
<button id="viewData" type="button" class="btn btn-primary" onclick="openPopup()">View History</button>
|
88 |
+
<button id="translate" type="submit">Translate</button>
|
89 |
+
</div>
|
90 |
+
</form>
|
91 |
+
|
92 |
+
<div class="back">
|
93 |
+
<a href="{{ url_for('index') }}"><button class="backb">Back</button></a>
|
94 |
+
</div>
|
95 |
+
|
96 |
+
<!-- Bootstrap JS Bundle -->
|
97 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
|
98 |
+
<script>
|
99 |
+
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
|
100 |
+
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
|
101 |
+
|
102 |
+
// Function for cleaning content in textboxes
|
103 |
+
function clearContent()
|
104 |
+
{
|
105 |
+
const type = document.getElementById('type');
|
106 |
+
const out = document.getElementById('out');
|
107 |
+
type.value = '';
|
108 |
+
out.value = '';
|
109 |
+
}
|
110 |
+
|
111 |
+
// Function to open a popup window using Flask routing
|
112 |
+
function openPopup() {
|
113 |
+
// The second argument is used to give the window a name
|
114 |
+
window.open('/translation_table', 'translation_table', 'width=600,height=400');
|
115 |
+
}
|
116 |
+
</script>
|
117 |
+
|
118 |
+
</body>
|
119 |
+
</html>
|
templates/ProjectBreakdownUI.html
ADDED
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Project Task Breakdown</title>
|
5 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='ProjectBreakdown.css') }}">
|
6 |
+
<!-- Bootstrap CSS -->
|
7 |
+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
|
8 |
+
</head>
|
9 |
+
<body>
|
10 |
+
|
11 |
+
<!-- Navigation bar; To go to different pages without having to go back to index/home page -->
|
12 |
+
<nav class="navbar navbar-expand-lg bg-body-tertiary">
|
13 |
+
<div class="container-fluid">
|
14 |
+
<a class="navbar-brand" href="{{ url_for('index') }}">Home</a>
|
15 |
+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
|
16 |
+
<span class="navbar-toggler-icon"></span>
|
17 |
+
</button>
|
18 |
+
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
19 |
+
<div class="navbar-nav">
|
20 |
+
<a class="nav-link active" href="{{ url_for('text_summarization') }}">Summarization</a>
|
21 |
+
<a class="nav-link" aria-current="page" href="{{ url_for('project_breakdown') }}">Task Breakdown</a>
|
22 |
+
<a class="nav-link" href="{{ url_for('language_translation') }}">Translation</a>
|
23 |
+
<a class="nav-link" href="{{ url_for('text_generation') }}">Generation</a>
|
24 |
+
</div>
|
25 |
+
</div>
|
26 |
+
</div>
|
27 |
+
</nav>
|
28 |
+
|
29 |
+
<header>
|
30 |
+
<img src="{{ url_for('static', filename='Images/Refineverse logo.png') }}" alt="Refineverse Logo">
|
31 |
+
<h1>Project Task Breakdown</h1>
|
32 |
+
</header>
|
33 |
+
|
34 |
+
<!-- User input textarea box; breakdown & clear button functionality; display output functionality -->
|
35 |
+
<main>
|
36 |
+
<form action="#" method="POST">
|
37 |
+
<div class="user-story">
|
38 |
+
<h2>User Story</h2>
|
39 |
+
<textarea id="user-story-text" name='user-story-text' placeholder="Enter your user story"></textarea>
|
40 |
+
<button id="clear-btn" formmethod="GET" formaction="#" onclick="clearTextArea()">Clear</button>
|
41 |
+
|
42 |
+
<!-- This uses Jinja templating to get all flash messages to be displayed -->
|
43 |
+
<!-- When using flash, it is necessary to always use a for-loop to grab all messages -->
|
44 |
+
{% with messages = get_flashed_messages(with_categories=true) %} <!-- This is to use flash with pre-set categories -->
|
45 |
+
{% for category, message in messages %}
|
46 |
+
{% if category == 'error' %} <!-- If it is a flash message with the error, message, we display our exception message -->
|
47 |
+
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
48 |
+
{{ message }}
|
49 |
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
50 |
+
</div>
|
51 |
+
{% else %} <!-- Otherwise, proceed as usual -->
|
52 |
+
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
53 |
+
{{ message }}
|
54 |
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
55 |
+
</div>
|
56 |
+
{% endif %}
|
57 |
+
{% endfor %}
|
58 |
+
{% endwith %}
|
59 |
+
|
60 |
+
<button id="breakdown-btn" name="breakdown-btn" type="submit">Breakdown</button>
|
61 |
+
</div>
|
62 |
+
</form>
|
63 |
+
|
64 |
+
<div class="user-story-list">
|
65 |
+
<h2>Breakdown Summary</h2>
|
66 |
+
|
67 |
+
<!-- Output Table -->
|
68 |
+
<table id="breakdown-table">
|
69 |
+
<thead>
|
70 |
+
<tr>
|
71 |
+
<th onclick="sortTable(0)">User Story</th>
|
72 |
+
<th onclick="sortTable(1)">Project Task</th>
|
73 |
+
</tr>
|
74 |
+
</thead>
|
75 |
+
|
76 |
+
<tbody id="breakdown-body">
|
77 |
+
<!-- Uses a for-loop to grab all contents from the breakdown table -->
|
78 |
+
{% for row in rows %}
|
79 |
+
<tr>
|
80 |
+
<!-- Return and display output from Refineverse.py based on routing from BreakdownFeature.py -->
|
81 |
+
<td>{{ row[0] }}</td>
|
82 |
+
<td>{{ row[1] }}</td>
|
83 |
+
</tr>
|
84 |
+
{% endfor %}
|
85 |
+
</tbody>
|
86 |
+
</table>
|
87 |
+
</div>
|
88 |
+
</main>
|
89 |
+
|
90 |
+
<!-- Back button -->
|
91 |
+
<div class="back-Btn-Container">
|
92 |
+
<div class="buttons-container">
|
93 |
+
<a href="{{ url_for('index') }}"><button class="back-btn">Back</button></a>
|
94 |
+
</div>
|
95 |
+
</div>
|
96 |
+
|
97 |
+
<!-- Bootstrap JS Bundle -->
|
98 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
|
99 |
+
<script>
|
100 |
+
function clearTextArea() {
|
101 |
+
document.getElementById("user-story-text").value = "";
|
102 |
+
}
|
103 |
+
|
104 |
+
// Function to sort table in ascending/descending order
|
105 |
+
function sortTable(columnIndex) {
|
106 |
+
// Initialize variables
|
107 |
+
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
|
108 |
+
table = document.getElementById("breakdown-table");
|
109 |
+
switching = true;
|
110 |
+
|
111 |
+
// Set the sorting direction to ascending:
|
112 |
+
dir = "asc";
|
113 |
+
// Make a loop that will continue until no switching has been done:
|
114 |
+
while (switching) {
|
115 |
+
// Start by saying: no switching is done:
|
116 |
+
switching = false;
|
117 |
+
rows = table.rows;
|
118 |
+
// Loop through all table rows (except the first, which contains table headers):
|
119 |
+
for (i = 1; i < (rows.length - 1); i++) {
|
120 |
+
// Start by saying there should be no switching:
|
121 |
+
shouldSwitch = false;
|
122 |
+
// Get the two elements you want to compare, one from current row and one from the next:
|
123 |
+
x = rows[i].getElementsByTagName("TD")[columnIndex];
|
124 |
+
y = rows[i + 1].getElementsByTagName("TD")[columnIndex];
|
125 |
+
// Check if the two rows should switch place, based on the direction, asc or desc:
|
126 |
+
if (dir == "asc") {
|
127 |
+
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
|
128 |
+
// If so, mark as a switch and break the loop:
|
129 |
+
shouldSwitch = true;
|
130 |
+
break;
|
131 |
+
}
|
132 |
+
} else if (dir == "desc") {
|
133 |
+
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
|
134 |
+
// If so, mark as a switch and break the loop:
|
135 |
+
shouldSwitch = true;
|
136 |
+
break;
|
137 |
+
}
|
138 |
+
}
|
139 |
+
}
|
140 |
+
if (shouldSwitch) {
|
141 |
+
// If a switch has been marked, make the switch and mark that a switch has been done:
|
142 |
+
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
|
143 |
+
switching = true;
|
144 |
+
// Each time a switch is done, increase this count by 1:
|
145 |
+
switchcount ++;
|
146 |
+
} else {
|
147 |
+
// If no switching has been done AND the direction is "asc", set the direction to "desc" and run the while loop again.
|
148 |
+
if (switchcount == 0 && dir == "asc") {
|
149 |
+
dir = "desc";
|
150 |
+
switching = true;
|
151 |
+
}
|
152 |
+
}
|
153 |
+
}
|
154 |
+
|
155 |
+
// Add arrow icons to the header cells to indicate the sort direction:
|
156 |
+
var headers = table.getElementsByTagName("TH");
|
157 |
+
for (i = 0; i < headers.length; i++) {
|
158 |
+
headers[i].innerHTML = headers[i].innerHTML.replace(/ ▲| ▼/g, "");
|
159 |
+
}
|
160 |
+
var arrow = document.createElement("span");
|
161 |
+
arrow.className = "arrow";
|
162 |
+
if (dir == "asc") {
|
163 |
+
arrow.innerHTML = " ▲";
|
164 |
+
} else {
|
165 |
+
arrow.innerHTML = " ▼";
|
166 |
+
}
|
167 |
+
headers[columnIndex].appendChild(arrow);
|
168 |
+
}
|
169 |
+
</script>
|
170 |
+
</body>
|
171 |
+
</html>
|
templates/RefineverseDashboardUI.html
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>DashboardUI</title>
|
5 |
+
<link rel="stylesheet" href="{{url_for('static', filename='Dashboard.css')}}">
|
6 |
+
</head>
|
7 |
+
<body>
|
8 |
+
<div class="title">
|
9 |
+
<img src="{{url_for('static', filename='Images/Refineverse logo.png')}}" alt="cant find picture">
|
10 |
+
<h1>User Story Refinement</h1>
|
11 |
+
</div>
|
12 |
+
<div class="con1">
|
13 |
+
<div class="trdl">
|
14 |
+
<div class="pic">
|
15 |
+
<img src="{{url_for('static', filename='Images/Text Summarization.png')}}" alt="cant find picture" class="p1">
|
16 |
+
<img src="{{url_for('static', filename='Images/Project Breakdown.png')}}" alt="cant find picture" class="p2">
|
17 |
+
|
18 |
+
</div>
|
19 |
+
<div class="tc1">
|
20 |
+
<div class="texts1">
|
21 |
+
<h2>User Story Summarization</h2>
|
22 |
+
<p id="f">With our plugin's natural language processing capabilities, you can now generate a concise summary of your user story with just a few clicks. No more sifting through lengthy descriptions or struggling to communicate the essence of your user story to team members. Our plugin does the heavy lifting for you!</p>
|
23 |
+
|
24 |
+
</div>
|
25 |
+
<div class="texts2">
|
26 |
+
<h2>Project Task Breakdown</h2>
|
27 |
+
<p id="s">With our plugin's natural language processing capabilities, our project task breakdown feature allows you to reduce a user story into multiple project tasks, for easier allocation of tasks to project members within a team. No more having to think of project tasks for team allocation.</p>
|
28 |
+
</div>
|
29 |
+
</div>
|
30 |
+
<div class="buttonc">
|
31 |
+
<a href="{{url_for('text_summarization')}}" class="button1">User Story Summarization</a>
|
32 |
+
<a href="{{url_for('project_breakdown')}}" class="button2">Project Task Breakdown</a>
|
33 |
+
</div>
|
34 |
+
</div>
|
35 |
+
<div class="trd2">
|
36 |
+
<div class="pic1">
|
37 |
+
<img src="{{url_for('static', filename='Images/Language Translation.jpg')}}" alt="cant find picture" class="p3">
|
38 |
+
<img src="{{url_for('static', filename='Images/Text Generation logo.png')}}" alt="cant find picture" class="p4">
|
39 |
+
</div>
|
40 |
+
<div class="tc2">
|
41 |
+
<div class="texts3">
|
42 |
+
<h2>Language Translation</h2>
|
43 |
+
<p id="t">With our plugin's advanced natural language processing capabilities, our language translation feature provides customizable translation options, allowing you to choose which languages you want to translate your user stories into. Allowing team members who speak different languages to collaborate more effectively and improving productivity.</p>
|
44 |
+
</div>
|
45 |
+
<div class="texts4">
|
46 |
+
<h2>User Story Generation</h2>
|
47 |
+
<p id="t">With our plugin's advanced natural language processing capabilities, our User Story Generation feature provides a powerful solution for agile teams seeking to streamline their project and user story refinement process. With our User Story Generation feature, you can easily create new user stories via a single prompt, and the feature will generate a suggested user story for you. Farewell to the hassle of manual user story creation!</p>
|
48 |
+
</div>
|
49 |
+
</div>
|
50 |
+
<div class="buttonc1">
|
51 |
+
<a href="{{url_for('language_translation')}}" class="button3">Language Translation</a>
|
52 |
+
<a href="{{url_for('text_generation')}}" class="button4">User Story Generation</a>
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
</div>
|
56 |
+
</body>
|
57 |
+
</html>
|
templates/SummarizationTable.html
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Summarization Data</title>
|
5 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='SummarizationTable.css') }}">
|
6 |
+
</head>
|
7 |
+
<body>
|
8 |
+
<table id="summarization-table">
|
9 |
+
<thead>
|
10 |
+
<tr>
|
11 |
+
<th onclick="sortTable(0)">User Story</th>
|
12 |
+
<th onclick="sortTable(1)">Summary</th>
|
13 |
+
</tr>
|
14 |
+
</thead>
|
15 |
+
<tbody>
|
16 |
+
<!-- Use Jinja template to grab all data from the summarization table -->
|
17 |
+
{% for summarization in summarizations %}
|
18 |
+
<tr>
|
19 |
+
<td>{{ summarization[0] }}</td>
|
20 |
+
<td>{{ summarization[1] }}</td>
|
21 |
+
</tr>
|
22 |
+
{% endfor %}
|
23 |
+
</tbody>
|
24 |
+
</table>
|
25 |
+
|
26 |
+
<script>
|
27 |
+
// Function to sort the table via its headers in asc/des order
|
28 |
+
function sortTable(columnIndex) {
|
29 |
+
// Initialize variables
|
30 |
+
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
|
31 |
+
table = document.getElementById("summarization-table");
|
32 |
+
switching = true;
|
33 |
+
|
34 |
+
// Set the sorting direction to ascending:
|
35 |
+
dir = "asc";
|
36 |
+
// Make a loop that will continue until no switching has been done:
|
37 |
+
while (switching) {
|
38 |
+
// Start by saying: no switching is done:
|
39 |
+
switching = false;
|
40 |
+
rows = table.rows;
|
41 |
+
// Loop through all table rows (except the first, which contains table headers):
|
42 |
+
for (i = 1; i < (rows.length - 1); i++) {
|
43 |
+
// Start by saying there should be no switching:
|
44 |
+
shouldSwitch = false;
|
45 |
+
// Get the two elements you want to compare, one from current row and one from the next:
|
46 |
+
x = rows[i].getElementsByTagName("TD")[columnIndex];
|
47 |
+
y = rows[i + 1].getElementsByTagName("TD")[columnIndex];
|
48 |
+
// Check if the two rows should switch place, based on the direction, asc or desc:
|
49 |
+
if (dir == "asc") {
|
50 |
+
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
|
51 |
+
// If so, mark as a switch and break the loop:
|
52 |
+
shouldSwitch = true;
|
53 |
+
break;
|
54 |
+
}
|
55 |
+
} else if (dir == "desc") {
|
56 |
+
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
|
57 |
+
// If so, mark as a switch and break the loop:
|
58 |
+
shouldSwitch = true;
|
59 |
+
break;
|
60 |
+
}
|
61 |
+
}
|
62 |
+
}
|
63 |
+
if (shouldSwitch) {
|
64 |
+
// If a switch has been marked, make the switch and mark that a switch has been done:
|
65 |
+
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
|
66 |
+
switching = true;
|
67 |
+
// Each time a switch is done, increase this count by 1:
|
68 |
+
switchcount ++;
|
69 |
+
} else {
|
70 |
+
// If no switching has been done AND the direction is "asc", set the direction to "desc" and run the while loop again.
|
71 |
+
if (switchcount == 0 && dir == "asc") {
|
72 |
+
dir = "desc";
|
73 |
+
switching = true;
|
74 |
+
}
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
// Add arrow icons to the header cells to indicate the sort direction:
|
79 |
+
var headers = table.getElementsByTagName("TH");
|
80 |
+
for (i = 0; i < headers.length; i++) {
|
81 |
+
headers[i].innerHTML = headers[i].innerHTML.replace(/ ▲| ▼/g, "");
|
82 |
+
}
|
83 |
+
var arrow = document.createElement("span");
|
84 |
+
arrow.className = "arrow";
|
85 |
+
if (dir == "asc") {
|
86 |
+
arrow.innerHTML = " ▲";
|
87 |
+
} else {
|
88 |
+
arrow.innerHTML = " ▼";
|
89 |
+
}
|
90 |
+
headers[columnIndex].appendChild(arrow);
|
91 |
+
}
|
92 |
+
</script>
|
93 |
+
</body>
|
94 |
+
</html>
|
templates/TextGenerationUI.html
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!-- jinja2 template engine coding style for flask framework -->
|
2 |
+
<!DOCTYPE html>
|
3 |
+
<html>
|
4 |
+
<head>
|
5 |
+
<title>User Story Generation</title>
|
6 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='TextGeneration.css') }}">
|
7 |
+
<!-- Bootstrap CSS -->
|
8 |
+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
|
9 |
+
</head>
|
10 |
+
<body>
|
11 |
+
|
12 |
+
<!-- Navigation bar; To go to different pages without having to go back to index/home page -->
|
13 |
+
<nav class="navbar navbar-expand-lg bg-body-tertiary">
|
14 |
+
<div class="container-fluid">
|
15 |
+
<a class="navbar-brand" href="{{ url_for('index') }}">Home</a>
|
16 |
+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
|
17 |
+
<span class="navbar-toggler-icon"></span>
|
18 |
+
</button>
|
19 |
+
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
20 |
+
<div class="navbar-nav">
|
21 |
+
<a class="nav-link active" aria-current="page" href="{{ url_for('text_summarization') }}">Summarization</a>
|
22 |
+
<a class="nav-link" href="{{ url_for('project_breakdown') }}">Task Breakdown</a>
|
23 |
+
<a class="nav-link" href="{{ url_for('language_translation') }}">Translation</a>
|
24 |
+
<a class="nav-link" href="{{ url_for('text_generation') }}">Generation</a>
|
25 |
+
</div>
|
26 |
+
</div>
|
27 |
+
</div>
|
28 |
+
</nav>
|
29 |
+
|
30 |
+
<div class="container">
|
31 |
+
|
32 |
+
<div class="logo">
|
33 |
+
<img id="refineverseLogo" alt="RefineverseLogo" src="{{ url_for('static', filename='Images/Refineverse logo.png') }}" class="home-image"/>
|
34 |
+
</div>
|
35 |
+
|
36 |
+
<div>
|
37 |
+
<label class="title">User Story Generation</label>
|
38 |
+
<p class="message">
|
39 |
+
Generate brand new user stories with a prompt.
|
40 |
+
</p>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
</div>
|
44 |
+
|
45 |
+
<div class="container">
|
46 |
+
<form method="POST" action="#">
|
47 |
+
<div class="box">
|
48 |
+
<textarea class="textarea" name="input_text" id="input_textarea" placeholder="Please describe your User Story in 'As a _ , I want to _ so that _' format."></textarea>
|
49 |
+
</div>
|
50 |
+
<div class="box1">
|
51 |
+
<textarea class="textarea1" name="output_text" id="output_textarea" placeholder="Your generated output goes here!" readonly>{{ generatedStory }}</textarea>
|
52 |
+
</div>
|
53 |
+
<div class="buttons-container">
|
54 |
+
<button class="ClearBtn" type="button" onclick="clearTextareas()">Clear</button>
|
55 |
+
<button class="ViewBtn" type="button" onclick="openPopup()">View History</button>
|
56 |
+
<button class="GenerateBtn" type="submit">Generate</button>
|
57 |
+
</div>
|
58 |
+
</form>
|
59 |
+
</div>
|
60 |
+
|
61 |
+
<div class="messages-container">
|
62 |
+
<!-- This uses Jinja templating to get all flash messages to be displayed -->
|
63 |
+
{% with messages = get_flashed_messages(with_categories=true) %}
|
64 |
+
{% for category, message in messages %}
|
65 |
+
{% if category == 'error' %}
|
66 |
+
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
67 |
+
{{ message }}
|
68 |
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
69 |
+
</div>
|
70 |
+
{% else %}
|
71 |
+
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
72 |
+
{{ message }}
|
73 |
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
74 |
+
</div>
|
75 |
+
{% endif %}
|
76 |
+
{% endfor %}
|
77 |
+
{% endwith %}
|
78 |
+
</div>
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<div class="BackBtnContainer">
|
82 |
+
<div class="buttons-container">
|
83 |
+
<a href="{{ url_for('index') }}"><button class="BackBtn">Back</button></a>
|
84 |
+
</div>
|
85 |
+
</div>
|
86 |
+
|
87 |
+
<!-- Bootstrap JS Bundle -->
|
88 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
|
89 |
+
<script>
|
90 |
+
// Function for cleaning content in textboxes
|
91 |
+
function clearTextareas()
|
92 |
+
{
|
93 |
+
document.getElementById('input_textarea').value = '';
|
94 |
+
document.getElementById('output_textarea').value = '';
|
95 |
+
}
|
96 |
+
|
97 |
+
// Function to open a popup window using Flask routing
|
98 |
+
function openPopup() {
|
99 |
+
// The second argument is used to give the window a name
|
100 |
+
// This is necessary to target it with JavaScript code!
|
101 |
+
window.open('/generation_table', 'generation_table', 'width=600,height=400');
|
102 |
+
}
|
103 |
+
</script>
|
104 |
+
</body>
|
105 |
+
</html>
|
templates/TextSummarizationUI.html
ADDED
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Text Summarization</title>
|
5 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='TextSummarization.css') }}">
|
6 |
+
<!-- Bootstrap CSS -->
|
7 |
+
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
|
8 |
+
</head>
|
9 |
+
<body>
|
10 |
+
|
11 |
+
<!-- Navigation bar; To go to different pages without having to go back to index/home page -->
|
12 |
+
<nav class="navbar navbar-expand-lg bg-body-tertiary">
|
13 |
+
<div class="container-fluid">
|
14 |
+
<a class="navbar-brand" href="{{ url_for('index') }}">Home</a>
|
15 |
+
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
|
16 |
+
<span class="navbar-toggler-icon"></span>
|
17 |
+
</button>
|
18 |
+
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
19 |
+
<div class="navbar-nav">
|
20 |
+
<a class="nav-link active" aria-current="page" href="{{ url_for('text_summarization') }}">Summarization</a>
|
21 |
+
<a class="nav-link" href="{{ url_for('project_breakdown') }}">Task Breakdown</a>
|
22 |
+
<a class="nav-link" href="{{ url_for('language_translation') }}">Translation</a>
|
23 |
+
<a class="nav-link" href="{{ url_for('text_generation') }}">Generation</a>
|
24 |
+
</div>
|
25 |
+
</div>
|
26 |
+
</div>
|
27 |
+
</nav>
|
28 |
+
|
29 |
+
<div class="container">
|
30 |
+
|
31 |
+
<div class="logo">
|
32 |
+
<img id="refineverseLogo" alt="RefineverseLogo" src="{{ url_for('static', filename='Images/Refineverse logo.png') }}" class="home-image"/>
|
33 |
+
</div>
|
34 |
+
|
35 |
+
<div>
|
36 |
+
<label class="title">User Story Summarization</label>
|
37 |
+
<p class="message">
|
38 |
+
Splitting large user stories into smaller user stories.
|
39 |
+
</p>
|
40 |
+
</div>
|
41 |
+
|
42 |
+
</div>
|
43 |
+
|
44 |
+
<div class="container">
|
45 |
+
<form method="POST" action="#">
|
46 |
+
<div class="box">
|
47 |
+
<textarea class="textarea" name="input_text" id="input_textarea" placeholder="Please describe your User Story in 'As a _ , I want to _ so that _' format."></textarea>
|
48 |
+
</div>
|
49 |
+
<div class="box1">
|
50 |
+
<textarea class="textarea1" name="output_text" id="output_textarea" placeholder="Your summarized output goes here!" readonly>{{ summarizedStory }}</textarea>
|
51 |
+
</div>
|
52 |
+
<div class="buttons-container">
|
53 |
+
<button class="ClearBtn" type="button" onclick="clearTextareas()">Clear</button>
|
54 |
+
<button class="ViewBtn" type="button" onclick="openPopup()">View History</button>
|
55 |
+
<button class="SummarizeBtn" type="submit">Summarize</button>
|
56 |
+
</div>
|
57 |
+
</form>
|
58 |
+
</div>
|
59 |
+
|
60 |
+
<div class="messages-container">
|
61 |
+
<!-- This uses Jinja templating to get all flash messages to be displayed -->
|
62 |
+
{% with messages = get_flashed_messages(with_categories=true) %}
|
63 |
+
{% for category, message in messages %}
|
64 |
+
{% if category == 'error' %}
|
65 |
+
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
66 |
+
{{ message }}
|
67 |
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
68 |
+
</div>
|
69 |
+
{% else %}
|
70 |
+
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
71 |
+
{{ message }}
|
72 |
+
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
73 |
+
</div>
|
74 |
+
{% endif %}
|
75 |
+
{% endfor %}
|
76 |
+
{% endwith %}
|
77 |
+
</div>
|
78 |
+
</div>
|
79 |
+
|
80 |
+
<div class="BackBtnContainer">
|
81 |
+
<div class="buttons-container">
|
82 |
+
<a href="{{ url_for('index') }}"><button class="BackBtn">Back</button></a>
|
83 |
+
</div>
|
84 |
+
</div>
|
85 |
+
|
86 |
+
<!-- Bootstrap JS Bundle -->
|
87 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
|
88 |
+
<script>
|
89 |
+
// Function for cleaning content in textboxes
|
90 |
+
function clearTextareas()
|
91 |
+
{
|
92 |
+
document.getElementById('input_textarea').value = '';
|
93 |
+
document.getElementById('output_textarea').value = '';
|
94 |
+
}
|
95 |
+
|
96 |
+
// Function to open a popup window using Flask routing
|
97 |
+
function openPopup() {
|
98 |
+
// The second argument is used to give the window a name
|
99 |
+
window.open('/summarization_table', 'summarization_table', 'width=600,height=400');
|
100 |
+
}
|
101 |
+
</script>
|
102 |
+
</body>
|
103 |
+
</html>
|
templates/TranslationTable.html
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Translation Data</title>
|
5 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='TranslationTable.css') }}">
|
6 |
+
</head>
|
7 |
+
<body>
|
8 |
+
<table id="translation-table">
|
9 |
+
<thead>
|
10 |
+
<tr>
|
11 |
+
<th onclick="sortTable(0)">User Story</th>
|
12 |
+
<th onclick="sortTable(1)">Translation</th>
|
13 |
+
</tr>
|
14 |
+
</thead>
|
15 |
+
<tbody>
|
16 |
+
<!-- Use Jinja templates to grab all data from the translation table -->
|
17 |
+
{% for translation in translations %}
|
18 |
+
<tr>
|
19 |
+
<td>{{ translation[0] }}</td>
|
20 |
+
<td>{{ translation[1] }}</td>
|
21 |
+
</tr>
|
22 |
+
{% endfor %}
|
23 |
+
</tbody>
|
24 |
+
</table>
|
25 |
+
|
26 |
+
<script>
|
27 |
+
// Function to sort the table via its headers in asc/des order
|
28 |
+
function sortTable(columnIndex) {
|
29 |
+
// Initialize variables
|
30 |
+
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
|
31 |
+
table = document.getElementById("translation-table");
|
32 |
+
switching = true;
|
33 |
+
|
34 |
+
// Set the sorting direction to ascending:
|
35 |
+
dir = "asc";
|
36 |
+
// Make a loop that will continue until no switching has been done:
|
37 |
+
while (switching) {
|
38 |
+
// Start by saying: no switching is done:
|
39 |
+
switching = false;
|
40 |
+
rows = table.rows;
|
41 |
+
// Loop through all table rows (except the first, which contains table headers):
|
42 |
+
for (i = 1; i < (rows.length - 1); i++) {
|
43 |
+
// Start by saying there should be no switching:
|
44 |
+
shouldSwitch = false;
|
45 |
+
|
46 |
+
// Get the two elements you want to compare, one from current row and one from the next:
|
47 |
+
x = rows[i].getElementsByTagName("TD")[columnIndex];
|
48 |
+
y = rows[i + 1].getElementsByTagName("TD")[columnIndex];
|
49 |
+
|
50 |
+
// Check if the two rows should switch place, based on the direction, asc or desc:
|
51 |
+
if (dir == "asc") {
|
52 |
+
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
|
53 |
+
// If so, mark as a switch and break the loop:
|
54 |
+
shouldSwitch = true;
|
55 |
+
break;
|
56 |
+
}
|
57 |
+
} else if (dir == "desc") {
|
58 |
+
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
|
59 |
+
// If so, mark as a switch and break the loop:
|
60 |
+
shouldSwitch = true;
|
61 |
+
break;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
if (shouldSwitch) {
|
66 |
+
// If a switch has been marked, make the switch and mark that a switch has been done:
|
67 |
+
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
|
68 |
+
switching = true;
|
69 |
+
// Each time a switch is done, increase this count by 1:
|
70 |
+
switchcount ++;
|
71 |
+
} else {
|
72 |
+
// If no switching has been done AND the direction is "asc", set the direction to "desc" and run the while loop again.
|
73 |
+
if (switchcount == 0 && dir == "asc") {
|
74 |
+
dir = "desc";
|
75 |
+
switching = true;
|
76 |
+
}
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
// Add arrow icons to the header cells to indicate the sort direction:
|
81 |
+
var headers = table.getElementsByTagName("TH");
|
82 |
+
for (i = 0; i < headers.length; i++) {
|
83 |
+
headers[i].innerHTML = headers[i].innerHTML.replace(/ ▲| ▼/g, "");
|
84 |
+
}
|
85 |
+
var arrow = document.createElement("span");
|
86 |
+
arrow.className = "arrow";
|
87 |
+
if (dir == "asc") {
|
88 |
+
arrow.innerHTML = " ▲";
|
89 |
+
} else {
|
90 |
+
arrow.innerHTML = " ▼";
|
91 |
+
}
|
92 |
+
headers[columnIndex].appendChild(arrow);
|
93 |
+
}
|
94 |
+
</script>
|
95 |
+
</body>
|
96 |
+
</html>
|