Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
c7187946
Commit
c7187946
authored
Feb 10, 2020
by
Lijiao
Committed by
GitHub
Feb 10, 2020
Browse files
Use office-fabric-ui components (#1964)
parent
fdfff50d
Changes
90
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
481 additions
and
359 deletions
+481
-359
src/webui/src/index.css
src/webui/src/index.css
+18
-3
src/webui/src/index.tsx
src/webui/src/index.tsx
+20
-15
src/webui/src/logo.svg
src/webui/src/logo.svg
+7
-0
src/webui/src/react-app-env.d.ts
src/webui/src/react-app-env.d.ts
+60
-0
src/webui/src/serviceWorker.ts
src/webui/src/serviceWorker.ts
+143
-0
src/webui/src/static/const.ts
src/webui/src/static/const.ts
+6
-42
src/webui/src/static/function.ts
src/webui/src/static/function.ts
+16
-11
src/webui/src/static/interface.ts
src/webui/src/static/interface.ts
+6
-6
src/webui/src/static/model/experiment.ts
src/webui/src/static/model/experiment.ts
+1
-0
src/webui/src/static/style/accuracy.css
src/webui/src/static/style/accuracy.css
+0
-7
src/webui/src/static/style/compare.scss
src/webui/src/static/style/compare.scss
+39
-31
src/webui/src/static/style/control.scss
src/webui/src/static/style/control.scss
+0
-65
src/webui/src/static/style/icon.scss
src/webui/src/static/style/icon.scss
+14
-0
src/webui/src/static/style/logDrawer.scss
src/webui/src/static/style/logDrawer.scss
+19
-103
src/webui/src/static/style/nav/nav.scss
src/webui/src/static/style/nav/nav.scss
+70
-0
src/webui/src/static/style/openRow.scss
src/webui/src/static/style/openRow.scss
+17
-36
src/webui/src/static/style/overview.scss
src/webui/src/static/style/overview.scss
+14
-9
src/webui/src/static/style/overviewTitle.scss
src/webui/src/static/style/overviewTitle.scss
+8
-7
src/webui/src/static/style/para.scss
src/webui/src/static/style/para.scss
+19
-5
src/webui/src/static/style/probar.scss
src/webui/src/static/style/probar.scss
+4
-19
No files found.
src/webui/src/index.css
View file @
c7187946
body
{
margin
:
0
;
padding
:
0
;
width
:
100%
;
height
:
100%
;
font-family
:
-apple-system
,
BlinkMacSystemFont
,
'Segoe UI'
,
'Roboto'
,
'Oxygen'
,
'Ubuntu'
,
'Cantarell'
,
'Fira Sans'
,
'Droid Sans'
,
'Helvetica Neue'
,
sans-serif
;
-webkit-font-smoothing
:
antialiased
;
-moz-osx-font-smoothing
:
grayscale
;
line-height
:
1
;
}
code
{
font-family
:
source-code-pro
,
Menlo
,
Monaco
,
Consolas
,
'Courier New'
,
monospace
;
}
/* http://meyerweb.com/eric/tools/css/reset/
/* http://meyerweb.com/eric/tools/css/reset/
v4.0 | 20180602
v4.0 | 20180602
License: none (public domain)
License: none (public domain)
...
@@ -31,9 +49,6 @@ footer, header, hgroup, main, menu, nav, section {
...
@@ -31,9 +49,6 @@ footer, header, hgroup, main, menu, nav, section {
*[
hidden
]
{
*[
hidden
]
{
display
:
none
;
display
:
none
;
}
}
body
{
line-height
:
1
;
}
ol
,
ul
{
ol
,
ul
{
list-style
:
none
;
list-style
:
none
;
}
}
...
...
src/webui/src/index.tsx
View file @
c7187946
import
'
babel-polyfill
'
;
import
React
from
'
react
'
;
import
*
as
React
from
'
react
'
;
import
ReactDOM
from
'
react-dom
'
;
import
*
as
ReactDOM
from
'
react-dom
'
;
import
App
from
'
./App
'
;
import
App
from
'
./App
'
;
import
{
Router
,
Route
,
browserHistory
,
IndexRedirect
}
from
'
react-router
'
;
import
{
Router
,
Route
,
browserHistory
,
IndexRedirect
}
from
'
react-router
'
;
import
registerServiceWorker
from
'
./registerServiceWorker
'
;
import
Overview
from
'
./components/Overview
'
;
import
Overview
from
'
./components/Overview
'
;
import
TrialsDetail
from
'
./components/TrialsDetail
'
;
import
TrialsDetail
from
'
./components/TrialsDetail
'
;
import
'
./index.css
'
;
import
'
./index.css
'
;
import
*
as
serviceWorker
from
'
./serviceWorker
'
;
ReactDOM
.
render
(
ReactDOM
.
render
(
(
(
<
Router
history
=
{
browserHistory
}
>
<
Router
history
=
{
browserHistory
}
>
<
Route
path
=
"/"
component
=
{
App
}
>
<
Route
path
=
"/"
component
=
{
App
}
>
<
IndexRedirect
to
=
"/oview"
/>
<
IndexRedirect
to
=
"/oview"
/>
<
Route
path
=
"/oview"
component
=
{
Overview
}
/>
<
Route
path
=
"/oview"
component
=
{
Overview
}
/>
<
Route
path
=
"/detail"
component
=
{
TrialsDetail
}
/>
<
Route
path
=
"/detail"
component
=
{
TrialsDetail
}
/>
</
Route
>
{
/* test branch */
}
</
Router
>
</
Route
>
),
</
Router
>
document
.
getElementById
(
'
root
'
)
as
HTMLElement
),
document
.
getElementById
(
'
root
'
)
);
);
registerServiceWorker
();
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker
.
unregister
();
src/webui/src/logo.svg
0 → 100644
View file @
c7187946
<svg
xmlns=
"http://www.w3.org/2000/svg"
viewBox=
"0 0 841.9 595.3"
>
<g
fill=
"#61DAFB"
>
<path
d=
"M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"
/>
<circle
cx=
"420.9"
cy=
"296.5"
r=
"45.7"
/>
<path
d=
"M520.5 78.1z"
/>
</g>
</svg>
src/webui/src/react-app-env.d.ts
0 → 100644
View file @
c7187946
declare
namespace
NodeJS
{
interface
ProcessEnv
{
readonly
NODE_ENV
:
'
development
'
|
'
production
'
|
'
test
'
;
readonly
PUBLIC_URL
:
string
;
}
}
declare
module
'
*.bmp
'
{
const
src
:
string
;
export
default
src
;
}
declare
module
'
*.gif
'
{
const
src
:
string
;
export
default
src
;
}
declare
module
'
*.jpg
'
{
const
src
:
string
;
export
default
src
;
}
declare
module
'
*.jpeg
'
{
const
src
:
string
;
export
default
src
;
}
declare
module
'
*.png
'
{
const
src
:
string
;
export
default
src
;
}
declare
module
'
*.webp
'
{
const
src
:
string
;
export
default
src
;
}
declare
module
'
*.svg
'
{
import
*
as
React
from
'
react
'
;
export
const
ReactComponent
:
React
.
FunctionComponent
<
React
.
SVGProps
<
SVGSVGElement
>>
;
const
src
:
string
;
export
default
src
;
}
declare
module
'
*.module.css
'
{
const
classes
:
{
[
key
:
string
]:
string
};
export
default
classes
;
}
declare
module
'
*.module.scss
'
{
const
classes
:
{
[
key
:
string
]:
string
};
export
default
classes
;
}
declare
module
'
*.module.sass
'
{
const
classes
:
{
[
key
:
string
]:
string
};
export
default
classes
;
}
src/webui/src/
registerS
erviceWorker.ts
→
src/webui/src/
s
erviceWorker.ts
View file @
c7187946
// In production, we register a service worker to serve assets from local cache.
// This optional code is used to register a service worker.
// register() is not called by default.
// This lets the app load faster on subsequent visits in production, and gives
// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on the 'N+1' visit to a page, since previously
// will only see deployed updates on subsequent visits to a page, after all the
// cached resources are updated in the background.
// existing tabs open on the page have been closed, since previously cached
// resources are updated in the background.
// To learn more about the benefits of this model
, read https://goo.gl/KwvDNy.
// To learn more about the benefits of this model
and instructions on how to
//
This link also includes instructions on opting out of this behavior.
//
opt-in, read https://bit.ly/CRA-PWA
const
isLocalhost
=
Boolean
(
const
isLocalhost
=
Boolean
(
window
.
location
.
hostname
===
'
localhost
'
||
window
.
location
.
hostname
===
'
localhost
'
||
// [::1] is the IPv6 localhost address.
// [::1] is the IPv6 localhost address.
window
.
location
.
hostname
===
'
[::1]
'
||
window
.
location
.
hostname
===
'
[::1]
'
||
// 127.0.0.1/8 is considered localhost for IPv4.
// 127.0.0.1/8 is considered localhost for IPv4.
window
.
location
.
hostname
.
match
(
window
.
location
.
hostname
.
match
(
/^127
(?:\.(?:
25
[
0-5
]
|2
[
0-4
][
0-9
]
|
[
01
]?[
0-9
][
0-9
]?)){3}
$/
/^127
(?:\.(?:
25
[
0-5
]
|2
[
0-4
][
0-9
]
|
[
01
]?[
0-9
][
0-9
]?)){3}
$/
)
)
);
);
function
registerValidSW
(
swUrl
:
string
):
void
{
type
Config
=
{
onSuccess
?:
(
registration
:
ServiceWorkerRegistration
)
=>
void
;
onUpdate
?:
(
registration
:
ServiceWorkerRegistration
)
=>
void
;
};
function
registerValidSW
(
swUrl
:
string
,
config
?:
Config
):
void
{
navigator
.
serviceWorker
navigator
.
serviceWorker
.
register
(
swUrl
)
.
register
(
swUrl
)
.
then
(
registration
=>
{
.
then
(
registration
=>
{
registration
.
onupdatefound
=
():
void
=>
{
registration
.
onupdatefound
=
():
void
=>
{
const
installingWorker
=
registration
.
installing
;
const
installingWorker
=
registration
.
installing
;
if
(
installingWorker
)
{
if
(
installingWorker
==
null
)
{
installingWorker
.
onstatechange
=
():
void
=>
{
return
;
if
(
installingWorker
.
state
===
'
installed
'
)
{
}
if
(
navigator
.
serviceWorker
.
controller
)
{
installingWorker
.
onstatechange
=
():
void
=>
{
// At this point, the old content will have been purged and
if
(
installingWorker
.
state
===
'
installed
'
)
{
// the fresh content will have been added to the cache.
if
(
navigator
.
serviceWorker
.
controller
)
{
// It's the perfect time to display a 'New content is
// At this point, the updated precached content has been fetched,
// available; please refresh.' message in your web app.
// but the previous service worker will still serve the older
console
.
log
(
'
New content is available; please refresh.
'
);
// content until all client tabs are closed.
}
else
{
console
.
log
(
// eslint-disable-line no-console
// At this point, everything has been precached.
'
New content is available and will be used when all
'
+
// It's the perfect time to display a
'
tabs for this page are closed. See https://bit.ly/CRA-PWA.
'
// 'Content is cached for offline use.' message.
);
console
.
log
(
'
Content is cached for offline use.
'
);
// Execute callback
if
(
config
&&
config
.
onUpdate
)
{
config
.
onUpdate
(
registration
);
}
}
else
{
// At this point, everything has been precached.
// It's the perfect time to display a
// "Content is cached for offline use." message.
console
.
log
(
'
Content is cached for offline use.
'
);
// eslint-disable-line no-console
// Execute callback
if
(
config
&&
config
.
onSuccess
)
{
config
.
onSuccess
(
registration
);
}
}
}
}
}
;
}
}
}
;
};
};
})
})
.
catch
(
error
=>
{
.
catch
(
error
=>
{
console
.
error
(
'
Error during service worker registration:
'
,
error
);
console
.
error
(
'
Error during service worker registration:
'
,
error
);
// eslint-disable-line no-console
});
});
}
}
function
checkValidServiceWorker
(
swUrl
:
string
):
void
{
function
checkValidServiceWorker
(
swUrl
:
string
,
config
?:
Config
):
void
{
// Check if the service worker can be found. If it can't reload the page.
// Check if the service worker can be found. If it can't reload the page.
fetch
(
swUrl
)
fetch
(
swUrl
)
.
then
(
response
=>
{
.
then
(
response
=>
{
// Ensure service worker exists, and that we really are getting a JS file.
// Ensure service worker exists, and that we really are getting a JS file.
const
contentType
=
response
.
headers
.
get
(
'
content-type
'
);
if
(
if
(
response
.
status
===
404
||
response
.
status
===
404
||
response
.
headers
.
get
(
'
content
-t
ype
'
)
!
.
indexOf
(
'
javascript
'
)
===
-
1
// eslint-disable-line @typescript-eslint/no-non-null-assertion
(
contentType
!=
null
&&
content
T
ype
.
indexOf
(
'
javascript
'
)
===
-
1
)
)
{
)
{
// No service worker found. Probably a different app. Reload the page.
// No service worker found. Probably a different app. Reload the page.
navigator
.
serviceWorker
.
ready
.
then
(
registration
=>
{
navigator
.
serviceWorker
.
ready
.
then
(
registration
=>
{
...
@@ -66,39 +87,48 @@ function checkValidServiceWorker(swUrl: string): void {
...
@@ -66,39 +87,48 @@ function checkValidServiceWorker(swUrl: string): void {
});
});
}
else
{
}
else
{
// Service worker found. Proceed as normal.
// Service worker found. Proceed as normal.
registerValidSW
(
swUrl
);
registerValidSW
(
swUrl
,
config
);
}
}
})
})
.
catch
(()
=>
{
.
catch
(()
=>
{
console
.
log
(
console
.
log
(
// eslint-disable-line no-console
'
No internet connection found. App is running in offline mode.
'
'
No internet connection found. App is running in offline mode.
'
);
);
});
});
}
}
export
default
function
register
():
void
{
export
function
register
(
config
?:
Config
):
void
{
if
(
process
.
env
.
NODE_ENV
===
'
production
'
&&
'
serviceWorker
'
in
navigator
)
{
if
(
process
.
env
.
NODE_ENV
===
'
production
'
&&
'
serviceWorker
'
in
navigator
)
{
// The URL constructor is available in all browsers that support SW.
// The URL constructor is available in all browsers that support SW.
const
publicUrl
=
new
URL
(
const
publicUrl
=
new
URL
(
process
.
env
.
PUBLIC_URL
!
,
// eslint-disable-line @typescript-eslint/no-non-null-assertion
(
process
as
{
env
:
{
[
key
:
string
]:
string
}
}).
env
.
PUBLIC_URL
,
window
.
location
.
toString
()
window
.
location
.
href
);
);
if
(
publicUrl
.
origin
!==
window
.
location
.
origin
)
{
if
(
publicUrl
.
origin
!==
window
.
location
.
origin
)
{
// Our service worker won't work if PUBLIC_URL is on a different origin
// Our service worker won't work if PUBLIC_URL is on a different origin
// from what our page is served on. This might happen if a CDN is used to
// from what our page is served on. This might happen if a CDN is used to
// serve assets; see https://github.com/facebook
incubator
/create-react-app/issues/2374
// serve assets; see https://github.com/facebook/create-react-app/issues/2374
return
;
return
;
}
}
window
.
addEventListener
(
'
load
'
,
()
=>
{
window
.
addEventListener
(
'
load
'
,
()
=>
{
const
swUrl
=
`
${
process
.
env
.
PUBLIC_URL
}
/service-worker.js`
;
const
swUrl
=
`
${
process
.
env
.
PUBLIC_URL
}
/service-worker.js`
;
if
(
!
isLocalhost
)
{
if
(
isLocalhost
)
{
// Is not local host. Just register service worker
// This is running on localhost. Let's check if a service worker still exists or not.
registerValidSW
(
swUrl
);
checkValidServiceWorker
(
swUrl
,
config
);
// Add some additional logging to localhost, pointing developers to the
// service worker/PWA documentation.
navigator
.
serviceWorker
.
ready
.
then
(()
=>
{
console
.
log
(
// eslint-disable-line no-console
'
This web app is being served cache-first by a service
'
+
'
worker. To learn more, visit https://bit.ly/CRA-PWA
'
);
});
}
else
{
}
else
{
//
This is running on localhost. Lets check if a service worker still exists or not.
//
Is not localhost. Just register service worker
checkValidServiceWorker
(
swUrl
);
registerValidSW
(
swUrl
,
config
);
}
}
});
});
}
}
...
...
src/webui/src/static/const.ts
View file @
c7187946
...
@@ -4,6 +4,7 @@ const METRIC_GROUP_UPDATE_SIZE = 20;
...
@@ -4,6 +4,7 @@ const METRIC_GROUP_UPDATE_SIZE = 20;
const
MANAGER_IP
=
`/api/v1/nni`
;
const
MANAGER_IP
=
`/api/v1/nni`
;
const
DOWNLOAD_IP
=
`/logs`
;
const
DOWNLOAD_IP
=
`/logs`
;
const
WEBUIDOC
=
'
https://nni.readthedocs.io/en/latest/Tutorial/WebUI.html
'
;
const
trialJobStatus
=
[
const
trialJobStatus
=
[
'
UNKNOWN
'
,
'
UNKNOWN
'
,
'
WAITING
'
,
'
WAITING
'
,
...
@@ -28,51 +29,14 @@ const DRAWEROPTION = {
...
@@ -28,51 +29,14 @@ const DRAWEROPTION = {
readOnly
:
true
,
readOnly
:
true
,
automaticLayout
:
true
automaticLayout
:
true
};
};
const
COLUMN_INDEX
=
[
const
OPERATION
=
'
Operation
'
;
{
name
:
'
Trial No.
'
,
index
:
1
},
{
name
:
'
ID
'
,
index
:
2
},
{
name
:
'
Start Time
'
,
index
:
3
},
{
name
:
'
End Time
'
,
index
:
4
},
{
name
:
'
Duration
'
,
index
:
5
},
{
name
:
'
Status
'
,
index
:
6
},
{
name
:
'
Intermediate result
'
,
index
:
7
},
{
name
:
'
Default
'
,
index
:
8
},
{
name
:
'
Operation
'
,
index
:
10000
}
];
// defatult selected column
// defatult selected column
const
COLUMN
=
[
'
Trial No.
'
,
'
ID
'
,
'
Duration
'
,
'
Status
'
,
'
Default
'
,
'
Operation
'
];
const
COLUMN
=
[
'
Trial No.
'
,
'
ID
'
,
'
Duration
'
,
'
Status
'
,
'
Default
'
,
OPERATION
];
// all choice column !dictory final
// all choice column !dictory final
const
COLUMNPro
=
[
'
Trial No.
'
,
'
ID
'
,
'
Start Time
'
,
'
End Time
'
,
'
Duration
'
,
'
Status
'
,
const
COLUMNPro
=
[
'
Trial No.
'
,
'
ID
'
,
'
Start Time
'
,
'
End Time
'
,
'
Duration
'
,
'
Status
'
,
'
Intermediate result
'
,
'
Default
'
,
'
Operation
'
];
'
Intermediate result
'
,
'
Default
'
,
OPERATION
];
export
{
export
{
MANAGER_IP
,
DOWNLOAD_IP
,
trialJobStatus
,
COLUMNPro
,
MANAGER_IP
,
DOWNLOAD_IP
,
trialJobStatus
,
COLUMNPro
,
WEBUIDOC
,
CONTROLTYPE
,
MONACO
,
COLUMN
,
COLUMN_INDEX
,
DRAWEROPTION
,
CONTROLTYPE
,
MONACO
,
COLUMN
,
DRAWEROPTION
,
OPERATION
,
METRIC_GROUP_UPDATE_THRESHOLD
,
METRIC_GROUP_UPDATE_SIZE
,
METRIC_GROUP_UPDATE_THRESHOLD
,
METRIC_GROUP_UPDATE_SIZE
,
};
};
src/webui/src/static/function.ts
View file @
c7187946
import
*
as
JSON5
from
'
json5
'
;
import
*
as
JSON5
from
'
json5
'
;
import
axios
from
'
axios
'
;
import
axios
from
'
axios
'
;
import
{
message
}
from
'
antd
'
;
import
{
MANAGER_IP
}
from
'
./const
'
;
import
{
MANAGER_IP
}
from
'
./const
'
;
import
{
MetricDataRecord
,
FinalType
,
TableObj
}
from
'
./interface
'
;
import
{
MetricDataRecord
,
FinalType
,
TableObj
}
from
'
./interface
'
;
...
@@ -25,7 +24,7 @@ const convertDuration = (num: number): string => {
...
@@ -25,7 +24,7 @@ const convertDuration = (num: number): string => {
const
hour
=
Math
.
floor
(
num
/
3600
);
const
hour
=
Math
.
floor
(
num
/
3600
);
const
minute
=
Math
.
floor
(
num
/
60
%
60
);
const
minute
=
Math
.
floor
(
num
/
60
%
60
);
const
second
=
Math
.
floor
(
num
%
60
);
const
second
=
Math
.
floor
(
num
%
60
);
const
result
=
[
];
const
result
:
string
[]
=
[];
if
(
hour
>
0
)
{
if
(
hour
>
0
)
{
result
.
push
(
`
${
hour
}
h`
);
result
.
push
(
`
${
hour
}
h`
);
}
}
...
@@ -59,7 +58,7 @@ const getFinalResult = (final?: MetricDataRecord[]): number => {
...
@@ -59,7 +58,7 @@ const getFinalResult = (final?: MetricDataRecord[]): number => {
};
};
// get final result value // acc obj
// get final result value // acc obj
const
getFinal
=
(
final
?:
MetricDataRecord
[]):
any
=>
{
const
getFinal
=
(
final
?:
MetricDataRecord
[]):
FinalType
|
undefined
=>
{
let
showDefault
:
FinalType
;
let
showDefault
:
FinalType
;
if
(
final
)
{
if
(
final
)
{
showDefault
=
JSON
.
parse
(
final
[
final
.
length
-
1
].
data
);
showDefault
=
JSON
.
parse
(
final
[
final
.
length
-
1
].
data
);
...
@@ -118,33 +117,35 @@ const killJob = (key: number, id: string, status: string, updateList?: Function)
...
@@ -118,33 +117,35 @@ const killJob = (key: number, id: string, status: string, updateList?: Function)
})
})
.
then
(
res
=>
{
.
then
(
res
=>
{
if
(
res
.
status
===
200
)
{
if
(
res
.
status
===
200
)
{
message
.
destroy
();
// TODO: use Message.txt to tooltip
message
.
success
(
'
Cancel the job successfully
'
);
alert
(
'
Cancel the job successfully
'
);
// render the table
// render the table
if
(
updateList
)
{
if
(
updateList
)
{
updateList
();
// FIXME
updateList
();
// FIXME
}
}
}
else
{
}
else
{
message
.
error
(
'
fail to cancel the job
'
);
alert
(
'
fail to cancel the job
'
);
}
}
})
})
.
catch
(
error
=>
{
.
catch
(
error
=>
{
if
(
error
.
response
.
status
===
500
)
{
if
(
error
.
response
.
status
===
500
)
{
if
(
error
.
response
.
data
.
error
)
{
if
(
error
.
response
.
data
.
error
)
{
message
.
error
(
error
.
response
.
data
.
error
);
alert
(
123
);
// message.error(error.response.data.error);
}
else
{
}
else
{
message
.
error
(
'
500 error, fail to cancel the job
'
);
alert
(
234
);
// message.error('500 error, fail to cancel the job');
}
}
}
}
});
});
};
};
const
filterByStatus
=
(
item
:
TableObj
):
an
y
=>
{
const
filterByStatus
=
(
item
:
TableObj
):
boole
an
=>
{
return
item
.
status
===
'
SUCCEEDED
'
;
return
item
.
status
===
'
SUCCEEDED
'
;
};
};
// a waittiong trial may havn't start time
// a waittiong trial may havn't start time
const
filterDuration
=
(
item
:
TableObj
):
an
y
=>
{
const
filterDuration
=
(
item
:
TableObj
):
boole
an
=>
{
return
item
.
status
!==
'
WAITING
'
;
return
item
.
status
!==
'
WAITING
'
;
};
};
...
@@ -170,7 +171,11 @@ const downFile = (content: string, fileName: string): void => {
...
@@ -170,7 +171,11 @@ const downFile = (content: string, fileName: string): void => {
}
}
};
};
function
formatTimestamp
(
timestamp
?:
number
,
placeholder
?:
string
=
'
N/A
'
):
string
{
// function formatTimestamp(timestamp?: number, placeholder?: string = 'N/A'): string {
function
formatTimestamp
(
timestamp
?:
number
,
placeholder
?:
string
):
string
{
if
(
placeholder
===
undefined
)
{
placeholder
=
'
N/A
'
;
}
return
timestamp
?
new
Date
(
timestamp
).
toLocaleString
(
'
en-US
'
)
:
placeholder
;
return
timestamp
?
new
Date
(
timestamp
).
toLocaleString
(
'
en-US
'
)
:
placeholder
;
}
}
...
...
src/webui/src/static/interface.ts
View file @
c7187946
// draw accuracy graph data interface
// draw accuracy graph data
export
interface
interface
TableObj
{
interface
TableObj
{
key
:
number
;
key
:
number
;
sequenceId
:
number
;
sequenceId
:
number
;
...
@@ -184,8 +184,8 @@ interface EventMap {
...
@@ -184,8 +184,8 @@ interface EventMap {
}
}
export
{
export
{
TableObj
,
TableRecord
,
Parameter
s
,
ExperimentProfile
,
AccurPoint
,
TableObj
,
TableRecord
,
SearchSpace
,
FinalType
,
Error
Parameter
,
Parameters
,
DetailAccurPoint
,
TooltipFor
Accuracy
,
ParaObj
,
Dimobj
,
FinalType
,
AccurPoint
,
DetailAccurPoint
,
TooltipFor
Intermediate
,
TooltipForAccuracy
,
TooltipForIntermediate
,
SearchSpace
,
Intermedia
,
MetricDataRecord
,
TrialJobInfo
,
Dimobj
,
ParaObj
,
Intermedia
,
MetricDataRecord
,
TrialJobInfo
,
ExperimentParams
,
NNIManagerStatus
,
EventMap
ExperimentProfile
,
NNIManagerStatus
,
EventMap
};
};
\ No newline at end of file
src/webui/src/static/model/experiment.ts
View file @
c7187946
...
@@ -79,6 +79,7 @@ class Experiment {
...
@@ -79,6 +79,7 @@ class Experiment {
}
}
get
error
():
string
{
get
error
():
string
{
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
if
(
!
this
.
statusField
)
{
if
(
!
this
.
statusField
)
{
throw
Error
(
'
Experiment status not initialized
'
);
throw
Error
(
'
Experiment status not initialized
'
);
}
}
...
...
src/webui/src/static/style/accuracy.css
deleted
100644 → 0
View file @
fdfff50d
.showMess
{
position
:
absolute
;
left
:
49%
;
top
:
48%
;
font-size
:
13px
;
color
:
#999
;
}
src/webui/src/static/style/compare.scss
View file @
c7187946
.compare
{
.compare-modal
{
width
:
92%
;
/* decide modal size */
table-layout
:
fixed
;
.ms-Dialog-main
{
margin
:
0
auto
;
max-width
:
70%
;
color
:
#333
;
tr
{
line-height
:
30px
;
}
}
tr
:nth-of-type
(
even
)
{
background-color
:
gainsboro
;
}
.column
{
max-width
:
124px
;
padding-left
:
18px
;
font-weight
:
600
;
}
.value
{
max-width
:
152px
;
padding-right
:
18px
;
text-align
:
left
;
}
.idList
{
font-weight
:
600
;
}
}
.compare-intermediate
{
/* compare-md: table style */
position
:
relative
;
&
-table
{
.compare-yAxis
{
width
:
92%
;
table-layout
:
fixed
;
margin
:
0
auto
;
color
:
#333
;
color
:
#333
;
position
:
absolute
;
tr
{
top
:
87%
;
line-height
:
30px
;
left
:
45%
;
}
tr
:nth-of-type
(
even
)
{
background-color
:
gainsboro
;
}
.column
{
max-width
:
124px
;
padding-left
:
18px
;
font-weight
:
600
;
}
.value
{
max-width
:
152px
;
padding-right
:
18px
;
text-align
:
left
;
}
.idList
{
font-weight
:
600
;
}
}
/* compare-md: intermediate graph style */
&
-intermediate
{
position
:
relative
;
.compare-yAxis
{
color
:
#333
;
position
:
absolute
;
top
:
87%
;
left
:
45%
;
}
}
}
}
}
\ No newline at end of file
src/webui/src/static/style/control.scss
deleted
100644 → 0
View file @
fdfff50d
.user
{
background
:
#ECF0F5
;
overflow
:
hidden
;
}
.userCon
{
width
:
100%
;
padding-left
:
30px
;
box-sizing
:
border-box
;
}
/* add job */
.addtrial
{
width
:
100%
;
}
div
.addtitle
{
height
:
64px
;
text-align
:
center
;
line-height
:
64px
;
margin-top
:
16px
;
color
:
#333
;
font-size
:
20px
;
}
/* textarea margin 0 auto */
.userInput
{
width
:
80%
;
margin
:
0
auto
;
color
:
#333
;
}
#userInputJob
,
#InputUpdate
{
color
:
#333
;
}
/* two btn style */
.addBtubox
{
width
:
80%
;
height
:
30px
;
margin
:
0
auto
;
margin-top
:
10px
;
}
.addBtubox
Button
{
float
:
right
;
height
:
30px
;
color
:
#fff
;
background-color
:
#3c8dbc
;
border-color
:
#3c8dbc
;
}
.addBtubox
Button
:hover
,
.addBtubox
Button
:focus
{
background-color
:
#3c8dbc
;
border-color
:
#3c8dbc
;
}
/* add job btn style end */
.updatesear
{
line-height
:
64px
;
text-align
:
center
;
margin-top
:
16px
;
color
:
#333
;
font-size
:
20px
;
}
.line
{
font-weight
:
600
;
color
:
rgb
(
60
,
141
,
188
);
padding-right
:
20px
;
}
/* search box style */
.searchbox
{
width
:
100%
;
}
\ No newline at end of file
src/webui/src/static/style/icon.scss
0 → 100644
View file @
c7187946
.iconButtons
{
margin-top
:
12px
;
i
{
font-size
:
16px
;
color
:
#fff
;
}
}
.docIcon
{
i
{
font-size
:
28px
;
}
}
\ No newline at end of file
src/webui/src/static/style/logDrawer.scss
View file @
c7187946
.card-container
>
.ant-tabs-card
>
.ant-tabs-content
{
.download
{
margin-top
:
-16px
;
button
,
}
button
:active
,
button
:hover
{
.card-container
>
.ant-tabs-card
>
.ant-tabs-content
>
.ant-tabs-tabpane
{
color
:
#fff
;
background
:
#fff
;
border
:
none
;
padding
:
16px
;
}
.card-container
>
.ant-tabs-card
>
.ant-tabs-bar
{
border-color
:
#fff
;
}
.card-container
>
.ant-tabs-card
>
.ant-tabs-bar
.ant-tabs-tab
{
border-color
:
transparent
;
background
:
transparent
;
}
}
}
.card-container
>
.ant-tabs-card
>
.ant-tabs-bar
.ant-tabs-tab-active
{
border-color
:
#fff
;
.log-tab-body
{
background
:
#fff
;
.refresh
{
margin-left
:
10px
;
display
:
none
;
}
}
}
.logContainer
{
/* office-fabric-ui */
height
:
100%
;
.ms-Panel-main
{
width
:
55%
;
background
:
#fff
;
}
}
/* log drawer download & close button's row */
/* log drawer download & close button's row */
.buttons
{
.buttons
{
margin-top
:
16px
;
margin-top
:
16px
;
.close
{
.close
{
text-align
:
right
;
text-align
:
right
;
}
}
}
}
/*
.logDrawer{
width: 100%;
.ant-drawer-body{
box-sizing: border-box;
-webkit-box-sizing: border-box;
}
}
*/
.ant-drawer-body
{
background
:
#333
;
}
.card-container
>
.ant-tabs-card
>
.ant-tabs-bar
{
border
:
none
;
}
.card-container
>
.ant-tabs-card
>
.ant-tabs-content
>
.ant-tabs-tabpane
{
background-color
:
#333
;
}
.close
{
Button
,
Button
:active
,
Button
:hover
{
background-color
:
#212121
;
color
:
#fff
;
border
:
none
;
}
}
.download
{
Button
,
Button
:active
,
Button
:hover
{
background-color
:
#2772be
;
color
:
#fff
;
border
:
none
;
}
}
.log-tab-body
>
.ant-tabs-card
>
.ant-tabs-bar
.ant-tabs-tab-active
{
background-color
:
#1e1e1e
;
color
:
#fff
;
border
:
none
;
}
.log-tab-body
.ant-tabs-nav
.ant-tabs-tab
:hover
,
.log-tab-body
.ant-tabs-nav
.ant-tabs-tab
{
color
:
#fff
;
border
:
none
;
}
.ant-tabs.ant-tabs-card
>
.ant-tabs-bar
.ant-tabs-tab
{
border
:
none
;
}
.log-tab-body
{
.refresh
{
margin-left
:
10px
;
display
:
none
;
}
.ant-tabs-tab-active
{
.refresh
{
transition
:
0
.3s
;
display
:
inline-block
;
}
.refresh
:hover
{
transform
:
scale
(
1
.2
);
}
}
}
.just-for-log
{
.monaco-editor
{
.line-numbers
{
color
:
#fff
;
}
.current-line
~
.line-numbers
{
color
:
#FFFAF0
;
}
}
.view-lines
{
background-color
:
#1e1e1e
;
.mtk1
{
color
:
#fff
;
}
}
.margin-view-overlays
{
background-color
:
#1e1e1e
;
}
}
src/webui/src/static/style/nav/nav.scss
0 → 100644
View file @
c7187946
$barHeight
:
56px
;
.navOptions
{
.ms-Button-icon
{
color
:
#fff
;
&
:hover
{
color
:
#fff
;
}
}
.ms-Button--commandBar
{
background-color
:
#0071bc
;
user-select
:
none
;
&
:hover
,
&
:active
{
color
:
#fff
;
.ms-Button-icon
{
color
:
#fff
;
}
}
.ms-Button-textContainer
{
color
:
#fff
;
}
.ms-Button-menuIcon
{
color
:
#fff
;
background-color
:
transparent
;
}
}
}
.nav
{
height
:
$barHeight
;
line-height
:
$barHeight
;
/* desktop mode useful*/
.desktop-logo
{
position
:
relative
;
top
:
6px
;
}
&
-refresh
{
position
:
relative
;
display
:
flex
;
}
&
-refresh-num
{
position
:
absolute
;
top
:
-10px
;
left
:
18px
;
color
:
#fff
;
font-size
:
12px
;
}
}
/* overview and detail tabs common style */
a
.common-tabs
{
font-family
:
'Segoe UI'
,
Tahoma
,
Geneva
,
Verdana
,
sans-serif
;
font-size
:
16px
;
color
:
#b8c7ce
;
text-decoration
:
none
;
}
.common-tabs
:visited
,
.high-light
:hover
{
color
:
#fff
;
text-decoration
:
none
;
}
.common-tabs
:hover
,
.high-light
{
color
:
#fff
;
border-bottom
:
1px
solid
#fff
;
}
.left-right-margin
{
margin-left
:
20px
;
margin-right
:
20px
;
}
\ No newline at end of file
src/webui/src/static/style/openRow.scss
View file @
c7187946
...
@@ -2,58 +2,39 @@
...
@@ -2,58 +2,39 @@
$color
:
#0071bc
;
$color
:
#0071bc
;
/* bg light grey */
/* bg light grey */
$bgColor
:
#f2f2f2
;
$bgColor
:
#f2f2f2
;
.openRowContent
{
.openRow
{
.ant-tabs-vertical.ant-tabs-left
.ant-tabs-bar
.ant-tabs-tab
{
width
:
100%
;
text-align
:
left
!
important
;
}
}
.openRowContent
{
.ant-tabs-nav
.ant-tabs-tab
:hover
{
color
:
$color
;
}
}
.openRowContent
{
margin-top
:
15px
;
background-color
:
$bgColor
;
background-color
:
$bgColor
;
.card
{
margin-bottom
:
10px
;
.ant-tabs-vertical
.ant-tabs-bar
.ant-tabs-tab
{
margin
:
0
;
&
Content
{
padding
:
8px
12px
;
width
:
91%
;
}
margin
:
0
auto
;
.ant-tabs-nav
.ant-tabs-tab-active
{
min-height
:
150px
;
color
:
$color
;
padding-bottom
:
10px
;
font-weight
:
600
;
background
:
#dedede
;
border-left
:
3px
solid
;
}
.ant-tabs-tabpane
{
background
:
#f2f2f2
;
padding
:
12px
12px
12px
0
;
}
}
}
}
}
.trialLog
{
.trialLog
{
white-space
:
normal
;
white-space
:
normal
;
color
:
#212121
;
color
:
#212121
;
}
}
#trialLogContent
{
#trialLogContent
{
.ant-input-disabled
{
color
:
#212121
;
background-color
:
#fff
;
cursor
:
pointer
;
border
:
none
;
}
.logcontent
{
.logcontent
{
height
:
100%
;
height
:
100%
;
}
}
}
}
#description
{
#description
{
.bgHyper
{
padding
:
0
10px
;
background-color
:
#fff
;
.bgHyper
ul
{
margin-bottom
:
12px
;
background-color
:
#fff
!
important
;
padding
:
3px
0
5px
0
!
important
;
font-size
:
14px
;
}
}
.copy
{
.copy
{
margin-top
:
3px
;
Button
{
Button
{
background-color
:
#ccc
;
background-color
:
#ccc
;
color
:
#191919
;
color
:
#191919
;
...
...
src/webui/src/static/style/overview.scss
View file @
c7187946
/* new style */
/* new style */
.overMessage
{
.overMessage
{
height
:
4
30
px
;
height
:
4
46
px
;
}
}
.overGraph
{
height
:
362px
;
.accuracy
{
width
:
100%
;
height
:
324px
;
}
}
.blockPadding
{
.blockPadding
{
padding
:
10px
20px
;
padding
:
10px
20px
;
}
}
...
@@ -23,7 +16,7 @@
...
@@ -23,7 +16,7 @@
}
}
.padItem
{
.padItem
{
padding
-left
:
20px
;
padding
:
10px
20px
0
20px
;
}
}
.searchSpace
{
.searchSpace
{
...
@@ -31,6 +24,8 @@
...
@@ -31,6 +24,8 @@
font-size
:
14px
;
font-size
:
14px
;
padding
:
15px
0
;
padding
:
15px
0
;
color
:
#212121
;
color
:
#212121
;
width
:
95%
;
margin
:
0
auto
;
}
}
.nowrap
{
.nowrap
{
...
@@ -52,3 +47,13 @@
...
@@ -52,3 +47,13 @@
.link
{
.link
{
margin-bottom
:
10px
;
margin-bottom
:
10px
;
}
}
.info
{
position
:
relative
;
top
:
15px
;
left
:
10px
;
span
{
color
:
#333
;
font-size
:
14px
;
}
}
\ No newline at end of file
src/webui/src/static/style/overviewTitle.scss
View file @
c7187946
$titleBgcolor
:
#b3b3b3
;
$titleBgcolor
:
#b3b3b3
;
$iconPaddingVal
:
14px
;
.overview
.overviewBoder
{
.overview
.overviewBoder
{
height
:
100%
;
height
:
100%
;
border-right
:
2px
solid
white
;
border-right
:
2px
solid
white
;
...
@@ -8,12 +10,15 @@ $titleBgcolor: #b3b3b3;
...
@@ -8,12 +10,15 @@ $titleBgcolor: #b3b3b3;
font-family
:
'Segoe UI'
,
Tahoma
,
Geneva
,
Verdana
,
sans-serif
;
font-family
:
'Segoe UI'
,
Tahoma
,
Geneva
,
Verdana
,
sans-serif
;
width
:
100%
;
width
:
100%
;
height
:
38px
;
height
:
38px
;
padding
:
0
$iconPaddingVal
;
background
:
$titleBgcolor
;
background
:
$titleBgcolor
;
img
{
img
{
height
:
22px
;
height
:
22px
;
margin-top
:
-8px
;
/* (38 - 22 ) / 2 */
padding-left
:
14px
;
margin-top
:
8px
;
/* icon right */
padding
:
0
$iconPaddingVal
0
0
;
}
}
span
{
span
{
...
@@ -21,15 +26,11 @@ $titleBgcolor: #b3b3b3;
...
@@ -21,15 +26,11 @@ $titleBgcolor: #b3b3b3;
font-weight
:
600
;
font-weight
:
600
;
color
:
#333
;
color
:
#333
;
line-height
:
38px
;
line-height
:
38px
;
margin-left
:
14px
;
}
}
i
{
i
{
font-size
:
24px
;
font-size
:
24px
;
margin-left
:
14px
;
color
:
#545454
;
color
:
#545454
;
position
:
relative
;
top
:
2px
;
}
}
}
}
...
@@ -46,11 +47,11 @@ $titleBgcolor: #b3b3b3;
...
@@ -46,11 +47,11 @@ $titleBgcolor: #b3b3b3;
}
}
.title
{
.title
{
width
:
135px
;
border-left
:
2px
solid
#fff
;
border-left
:
2px
solid
#fff
;
}
}
.minTitle
{
.minTitle
{
margin-right
:
$iconPaddingVal
;
border-right
:
2px
solid
#fff
;
border-right
:
2px
solid
#fff
;
}
}
...
...
src/webui/src/static/style/para.scss
View file @
c7187946
.parameter
{
.parameter
{
height
:
100%
;
height
:
100%
;
}
}
.para-filter
{
width
:
97%
;
margin-top
:
15px
;
&
-text
{
line-height
:
32px
;
margin-right
:
10px
;
}
&
-percent
{
margin-right
:
10px
;
}
}
.meline
{
.meline
{
margin-top
:
15px
;
margin-top
:
15px
;
...
@@ -27,16 +40,14 @@
...
@@ -27,16 +40,14 @@
/* Intermediate Result Style */
/* Intermediate Result Style */
.intermediate
{
.intermediate
{
width
:
90%
;
width
:
95%
;
text-align
:
right
;
/* border: 1px solid blue; */
/* border: 1px solid blue; */
input
{
input
{
width
:
64px
;
width
:
64px
;
height
:
3
2px
;
height
:
2
6
px
;
padding-left
:
8px
;
padding-left
:
8px
;
}
}
.strange
{
.strange
{
margin-top
:
2px
;
margin-right
:
15px
;
margin-right
:
15px
;
}
}
.hyphen
{
.hyphen
{
...
@@ -46,4 +57,7 @@
...
@@ -46,4 +57,7 @@
.filter-x
{
.filter-x
{
margin-left
:
15px
;
margin-left
:
15px
;
}
}
.filter-toggle
{
line-height
:
32px
;
}
}
}
src/webui/src/static/style/probar.scss
View file @
c7187946
...
@@ -4,37 +4,22 @@
...
@@ -4,37 +4,22 @@
.RUNNING
,
.STOPPING
,
.INITIALIZED
,
.NO_MORE_TRIAL
,
.TUNER_NO_MORE_TRIAL
{
.RUNNING
,
.STOPPING
,
.INITIALIZED
,
.NO_MORE_TRIAL
,
.TUNER_NO_MORE_TRIAL
{
/* specific status color */
/* specific status color */
color
:
#0071bc
;
color
:
#0071bc
;
.ant-progress-bg
{
/* progress- duration & trial numbers span */
.ms-ProgressIndicator-progressBar
{
background-color
:
#0071bc
;
background-color
:
#0071bc
;
}
}
.ant-progress-text
{
color
:
#0071bc
;
}
}
}
.DONE
,
.STOPPED
{
.DONE
,
.STOPPED
{
color
:
#009245
;
color
:
#009245
;
.
ant
-progress
-bg
{
.
ms-ProgressIndicator
-progress
Bar
{
background-color
:
#009245
;
background-color
:
#009245
;
}
}
.ant-progress-text
{
color
:
#009245
;
}
}
}
.ERROR
{
.ERROR
{
color
:
#eb0716
;
color
:
#eb0716
;
.
ant
-progress
-bg
{
.
ms-ProgressIndicator
-progress
Bar
{
background-color
:
#eb0716
;
background-color
:
#eb0716
;
}
}
.ant-progress-text
{
color
:
#eb0716
;
}
}
.ant-progress-bg
{
border-radius
:
0
!
important
;
}
.ant-progress-status-success
.ant-progress-bg
{
border-radius
:
0
12px
12px
0
!
important
;
}
}
}
}
...
...
Prev
1
2
3
4
5
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment