1
1
import React , { FormEvent } from 'react' ;
2
- // import logo from './logo.svg ';
3
- import './App.css' ;
2
+ import { Component } from 'react ' ;
3
+
4
4
import {
5
5
ToolButton ,
6
6
ToolButtonList , /* IGraphView, IMatrixView, INGraphsView, State, ToolButton*/
7
7
} from "graphlabs.core.template" ;
8
8
import { GraphVisualizer , Template , Toolbar , store , StudentMark , Console , graphActionCreators , adapter } from "graphlabs.core.template" ;
9
- import { /*Graph, SccBuilder, Vertex, Edge,*/ IGraph , IVertex , IEdge , GraphGenerator } from "graphlabs.core.graphs" ;
9
+ import { /*Graph, SccBuilder, Vertex, Edge,*/
10
+ IGraph ,
11
+ IVertex ,
12
+ IEdge ,
13
+ GraphGenerator ,
14
+ Vertex
15
+ } from "graphlabs.core.graphs" ;
10
16
import styles from './Template.module.scss' ;
11
17
import 'graphlabs.core.template/dist/main.css' ;
12
18
import { WritableAdapter } from "graphlabs.core.visualizer" ;
13
19
20
+ import './App.css' ;
21
+
14
22
import { /*Component,*/ SFC } from 'react' ;
15
23
import { init1 , graphModel1 , init2 , graphModel2 , initres , /*graphModelres,*/ init , graphModel } from './ForMyGraphModel' ;
16
- import { message_0 , message_0_changing , num_0 , num_0_changing , message_1 , message_1_changing , mark_0 , mark_0_changing , T_s , T_s_changing , T_s_shawing } from './ForMeVars' ;
24
+ import { message_0 , message_0_changing , num_0 , num_0_changing , message_1 , message_1_changing , mark_0 , mark_0_changing , T_s , T_s_changing , T_s_shawing } from './ForMeVars' ;
17
25
import { ChooseTask } from './Ops' ;
18
26
import { CheckingAnswer , StartDifficult , LastCheckingAnswer } from "./CheckAnswer" ;
19
27
import { GraphsInit } from "./GraphsInit"
28
+ import ReactDOM from "react-dom" ;
29
+ import { log } from "util" ;
20
30
21
31
class App extends Template {
22
32
@@ -28,7 +38,11 @@ class App extends Template {
28
38
StartDifficult ( ) ;
29
39
mark_0_changing ( 0 ) ;
30
40
GraphsInit ( ) ;
31
- let timerId = setInterval ( ( ) => { T_s_changing ( T_s - 1 ) ; this . forceUpdate ( ) ; } , 1000 ) ;
41
+
42
+ let timerId = setInterval ( ( ) => {
43
+ T_s_changing ( T_s - 1 ) ;
44
+ ReactDOM . render ( T_s_shawing ( ) , document . getElementById ( "T_s" ) ) ;
45
+ } , 1000 ) ;
32
46
window . setTimeout ( ( ) => { clearInterval ( timerId ) ; LastCheckingAnswer ( ) ; } , 1000 * 45 * 60 ) ;
33
47
}
34
48
@@ -73,10 +87,11 @@ class App extends Template {
73
87
);
74
88
}*/
75
89
76
-
77
-
78
90
// 1) разобраться со store, dispatch и др
79
91
92
+ // Проблема с огромным пробелом на сайте не в модуле, а в самом сайте, там проблема скорее не в flex
93
+
94
+ // пустое пространство му графами в задании тем меньше, чем больше соотношение экрана.
80
95
81
96
protected getTaskToolbar ( ) {
82
97
//super.getTaskToolbar()
@@ -89,55 +104,67 @@ class App extends Template {
89
104
}
90
105
ToolButtonList . prototype . beforeComplete = beforeComplete . bind ( this ) ;
91
106
ToolButtonList . prototype . help = ( ) => `В данном задании вы должны построить результат операции, указанной в задании в правой части экрана. Для этого вы можете добавлять любое число вершин/рёбер. Также вы можете удалять любое число вершин, не инцидентных ни одному ребру или рёбер. Оценка зависит только от того, правильно ли вы построите граф.` ;
107
+ ToolButtonList . prototype . toolButtons = { } ;
92
108
93
- ToolButtonList . prototype . toolButtons = {
109
+ /* ToolButtonList.prototype.toolButtons = {
94
110
"http://gl-backend.svtz.ru:5000/odata/downloadImage(name='add_vertex.png')": () => {
95
111
const start = new Date().getTime();
96
112
adapter.addVertex();
97
113
const end = new Date().getTime();
98
114
T_s_changing(T_s - Math.round((end-start)/1000));
99
115
},
100
- "http://gl-backend.svtz.ru:5000/odata/downloadImage(name='add_edge.png')" : ( ) => { // Меняю имя всем рёбрам на адекватные - ужасный костыль
101
- const start = new Date ( ) . getTime ( ) ;
102
- adapter . addEdge ( ) ;
103
- graphModel . edges . forEach ( ( e :IEdge , i = 0 ) => { e . name = `${ i ++ } ` ; } ) ;
104
- const end = new Date ( ) . getTime ( ) ;
105
- T_s_changing ( T_s - Math . round ( ( end - start ) / 1000 ) ) ;
106
- } ,
107
- "http://gl-backend.svtz.ru:5000/odata/downloadImage(name='remove_vertex.png')" : ( ) => { // Меняю имя всем рёбрам на адекватные - ужасный костыль
108
- const start = new Date ( ) . getTime ( ) ;
109
- adapter . removeVertex ( ) ;
110
- const end = new Date ( ) . getTime ( ) ;
111
- T_s_changing ( T_s - Math . round ( ( end - start ) / 1000 ) ) ;
112
- } ,
113
- "http://gl-backend.svtz.ru:5000/odata/downloadImage(name='remove_edge.png')" : ( ) => { // Меняю имя всем рёбрам на адекватные - ужасный костыль
114
- const start = new Date ( ) . getTime ( ) ;
115
- adapter . removeEdge ( ) ;
116
- const end = new Date ( ) . getTime ( ) ;
117
- T_s_changing ( T_s - Math . round ( ( end - start ) / 1000 ) ) ;
118
- }
119
- } ;
116
+ };*/
120
117
return ToolButtonList ;
121
118
} ;
122
119
Toolbar . prototype . render = ( ) => {
123
120
const Buttons = Toolbar . prototype . getButtonList ( ) ;
124
121
return (
125
- < div >
126
- < div > Панель инструментов</ div >
122
+ < div style = { { marginLeft : '4px' } } >
123
+ < p > Панель инструментов</ p >
127
124
< Buttons />
128
- < button type = { "button" } style = { { border : '1px double black' , background : 'white' , margin : '4px' } } onClick = { ( ) => {
129
- CheckingAnswer ( ) ;
130
- num_0_changing ( num_0 + 1 ) ;
131
- GraphsInit ( ) ;
125
+ < button style = { { marginTop :'4px' , border : '1px double black' , borderRadius :'10px' , background : 'white' , width :'130px' , height :'46px' , textAlign : 'center' , font :'13pt serif' } } onClick = { ( ) => {
126
+ const start = new Date ( ) . getTime ( ) ;
127
+ //adapter.addVertex();
128
+ graphModel . addVertex ( new Vertex ( `${ window . prompt ( "Добавте вершину, имя вершины должно состоять из последовательности цифр." , '0' ) } ` ) ) ;
129
+ this . render ( ) ;
132
130
this . forceUpdate ( ) ;
133
- if ( num_0 === 7 ) { // удалить кнопку было бы хорошо
134
- message_1_changing ( "Завершите выполнение теста." ) ;
135
- this . disable ( ) ;
131
+ const end = new Date ( ) . getTime ( ) ;
132
+ T_s_changing ( T_s - Math . round ( ( end - start ) / 1000 ) ) ;
133
+ } } > Добавить< br /> вершину</ button >
134
+ < button style = { { marginTop :'4px' , border : '1px double black' , borderRadius :'10px' , background : 'white' , width :'130px' , height :'46px' , textAlign : 'center' , font :'13pt serif' } } onClick = { ( ) => {
135
+ const start = new Date ( ) . getTime ( ) ;
136
+ adapter . addEdge ( ) ;
137
+ graphModel . edges . forEach ( ( e :IEdge , i = 0 ) => { e . name = `${ i ++ } ` ; } ) ;
138
+ const end = new Date ( ) . getTime ( ) ;
139
+ T_s_changing ( T_s - Math . round ( ( end - start ) / 1000 ) ) ;
140
+ } } > Добавить< br /> ребро</ button >
141
+ < button style = { { marginTop :'17px' , border : '1px double black' , borderRadius :'10px' , background : 'white' , width :'130px' , height :'46px' , textAlign : 'center' , font :'13pt serif' } } onClick = { ( ) => {
142
+ const start = new Date ( ) . getTime ( ) ;
143
+ adapter . removeVertex ( ) ;
144
+ const end = new Date ( ) . getTime ( ) ;
145
+ T_s_changing ( T_s - Math . round ( ( end - start ) / 1000 ) ) ;
146
+ } } > Удалить< br /> вершину</ button >
147
+ < button style = { { marginTop :'4px' , border : '1px double black' , borderRadius :'10px' , background : 'white' , width :'130px' , height :'46px' , textAlign : 'center' , font :'13pt serif' } } onClick = { ( ) => {
148
+ const start = new Date ( ) . getTime ( ) ;
149
+ adapter . removeEdge ( ) ;
150
+ const end = new Date ( ) . getTime ( ) ;
151
+ T_s_changing ( T_s - Math . round ( ( end - start ) / 1000 ) ) ;
152
+ } } > Удалить< br /> ребро</ button >
153
+ < button type = { "button" } style = { { marginTop :'17px' , border : '1px double black' , borderRadius :'10px' , background : 'white' , width :'130px' , height :'46px' , textAlign : 'center' , font :'13pt serif' } } onClick = { ( ) => {
154
+ if ( window . confirm ( "Вы уверены, что хотите перейти к новой операции?" ) ) {
155
+ CheckingAnswer ( ) ;
156
+ num_0_changing ( num_0 + 1 ) ;
157
+ GraphsInit ( ) ;
158
+ this . forceUpdate ( ) ;
159
+ if ( num_0 === 7 ) { // удалить кнопку было бы хорошо
160
+ message_1_changing ( "Завершите выполнение теста." ) ;
161
+ this . disable ( ) ;
162
+ }
136
163
}
137
164
} } > { message_1 } </ button >
138
- < div > Time left: { T_s_shawing ( ) } </ div >
165
+ < T_s_shawing / >
139
166
</ div > ) ;
140
- }
167
+ } ;
141
168
return Toolbar ;
142
169
}
143
170
@@ -149,20 +176,21 @@ class App extends Template {
149
176
}
150
177
151
178
protected getArea ( ) : SFC < { } > {
152
- return ( ) => < div >
153
- < p >
179
+ return ( ) =>
180
+ < div style = { { marginLeft :'4px' , marginTop :'4px' } } >
181
+ < p className = { "help_for_casuals" } data-title = "Рабочая область. В ней вы можете строить граф, являющийся результатом операции из области задания. Чтобы выделить ребро или вершину, нужно нажать на соответствующий элемент (который при выделении окрашивается в зелёный или красный соответственно)." >
182
+ < img src = { "http://gl-backend.svtz.ru:5000/odata/downloadImage(name='Help.png')" } > </ img >
183
+ </ p >
154
184
< GraphVisualizer
155
185
graph = { graphModel }
156
186
adapterType = { 'writable' }
157
187
namedEdges = { false }
158
188
vertexNaming = { true }
159
- withoutDragging = { true }
189
+ withoutDragging = { false }
160
190
edgeNaming = { false }
161
191
incidentEdges = { false }
162
192
/>
163
- </ p >
164
- </ div > ;
165
-
193
+ </ div >
166
194
//return () =>
167
195
// <GraphVisualizer
168
196
// graph={graphModelres}
@@ -177,31 +205,32 @@ class App extends Template {
177
205
178
206
protected task ( ) : SFC < { } > {
179
207
return ( ) =>
180
- < div >
181
- < p >
182
- { message_0 }
208
+ < div style = { { marginLeft : '5px' } } >
209
+ < p className = { "help_for_casuals" } data-title = "Область задания. Здесь представлено задание, которое нужно выполнить." >
210
+ < img src = { "http://gl-backend.svtz.ru:5000/odata/downloadImage(name='Help.png')" } > </ img >
183
211
</ p >
184
- < div >
185
- < p >
186
- { num_0 !== 1 ?"1." :'' } < GraphVisualizer
187
- graph = { graphModel1 }
188
- adapterType = { 'readable' }
189
- namedEdges = { false }
190
- vertexNaming = { false }
191
- withoutDragging = { true }
192
- edgeNaming = { false }
193
- incidentEdges = { false }
194
- />
195
- { num_0 !== 1 ?"2." :'' } < GraphVisualizer
196
- graph = { graphModel2 }
197
- adapterType = { 'readable' }
198
- namedEdges = { false }
199
- vertexNaming = { false }
200
- withoutDragging = { true }
201
- edgeNaming = { false }
202
- incidentEdges = { false }
203
- />
204
- </ p >
212
+ { message_0 }
213
+ < div className = { "raph-Model-1" } >
214
+ < GraphVisualizer
215
+ graph = { graphModel1 }
216
+ adapterType = { 'readable' }
217
+ namedEdges = { false }
218
+ vertexNaming = { false }
219
+ withoutDragging = { true }
220
+ edgeNaming = { false }
221
+ incidentEdges = { false }
222
+ />
223
+ </ div >
224
+ < div className = { "raph-Model-2" } >
225
+ < GraphVisualizer
226
+ graph = { graphModel2 }
227
+ adapterType = { 'readable' }
228
+ namedEdges = { false }
229
+ vertexNaming = { false }
230
+ withoutDragging = { true }
231
+ edgeNaming = { false }
232
+ incidentEdges = { false }
233
+ />
205
234
</ div >
206
235
</ div > ;
207
236
}
0 commit comments