Moved to new theme
This commit is contained in:
parent
d94f48fd06
commit
b7e35731c8
8 changed files with 215 additions and 113 deletions
|
|
@ -11,6 +11,7 @@ import zutil.ui.Navigation;
|
|||
import zutil.ui.UserMessageManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
|
@ -41,28 +42,32 @@ public abstract class TraderPage implements HttpPage {
|
|||
Map<String, Object> session, Map<String, String> cookie,
|
||||
Map<String, String> request) throws IOException {
|
||||
try {
|
||||
// Prepare common template data
|
||||
|
||||
Map<String,Object> data = new HashMap<>();
|
||||
data.put("rootNav", rootNav.createPagedNavInstance(header).getSubNavs());
|
||||
data.put("userNav", userNav.createPagedNavInstance(header).getSubNavs());
|
||||
data.put("breadcrumb", Navigation.getBreadcrumb(Navigation.getPagedNavigation(header)));
|
||||
data.put("page", Navigation.getPagedNavigation(header));
|
||||
data.put("alerts", AlertEndpoint.getInstance().generateAlerts());
|
||||
data.put("user", "Profile");
|
||||
|
||||
// Create templates
|
||||
|
||||
Templator navigationTemplate = new Templator(FileUtil.find(TEMPLATE_NAVIGATION));
|
||||
navigationTemplate.set("rootNav", rootNav.createPagedNavInstance(header).getSubNavs());
|
||||
navigationTemplate.set("userNav", userNav.createPagedNavInstance(header).getSubNavs());
|
||||
navigationTemplate.setAll(data);
|
||||
|
||||
Templator subNavigationTemplate = null;
|
||||
if (showSubNav) {
|
||||
subNavigationTemplate = new Templator(FileUtil.find(TEMPLATE_SUB_NAVIGATION));
|
||||
List<Navigation> breadcrumb = Navigation.getBreadcrumb(Navigation.getPagedNavigation(header));
|
||||
|
||||
subNavigationTemplate.set("rootNav", rootNav.createPagedNavInstance(header).getSubNavs());
|
||||
subNavigationTemplate.set("userNav", userNav.createPagedNavInstance(header).getSubNavs());
|
||||
if (!breadcrumb.isEmpty())
|
||||
subNavigationTemplate.set("sub_navigation", breadcrumb.get(1).createPagedNavInstance(header).getSubNavs());
|
||||
subNavigationTemplate.setAll(data);
|
||||
}
|
||||
|
||||
Templator main = new Templator(FileUtil.find(TEMPLATE_MAIN));
|
||||
main.setAll(data);
|
||||
main.set("navigation", navigationTemplate);
|
||||
main.set("sub_navigation", subNavigationTemplate);
|
||||
main.set("alerts", AlertEndpoint.getInstance().generateAlerts());
|
||||
main.set("content", httpRespond(session, cookie, request));
|
||||
main.set("user", "Profile");
|
||||
|
||||
|
||||
out.print(main.compile());
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
45
src/main/java/se/koc/trader/page/ExchangeConfigPage.java
Normal file
45
src/main/java/se/koc/trader/page/ExchangeConfigPage.java
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package se.koc.trader.page;
|
||||
|
||||
import se.koc.trader.TraderContext;
|
||||
import se.koc.trader.api.TraderPage;
|
||||
import se.koc.trader.struct.Symbol;
|
||||
import zutil.ObjectUtil;
|
||||
import zutil.db.DBConnection;
|
||||
import zutil.io.file.FileUtil;
|
||||
import zutil.log.LogUtil;
|
||||
import zutil.parser.Templator;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import static zutil.ui.UserMessageManager.*;
|
||||
|
||||
|
||||
public class ExchangeConfigPage extends TraderPage {
|
||||
private static final Logger logger = LogUtil.getLogger();
|
||||
private static final String TEMPLATE = TraderContext.RESOURCE_WEB_ROOT + "/exchange_config.tmpl";
|
||||
|
||||
|
||||
public ExchangeConfigPage() {
|
||||
super("exchange_config");
|
||||
super.getRootNav().createSubNav("Settings").createSubNav(this.getId(), "Exchange Settings").setWeight(100);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Templator httpRespond(
|
||||
Map<String, Object> session,
|
||||
Map<String, String> cookie,
|
||||
Map<String, String> request)
|
||||
throws Exception{
|
||||
|
||||
DBConnection db = TraderContext.getDB();
|
||||
|
||||
// Output
|
||||
Templator tmpl = new Templator(FileUtil.find(TEMPLATE));
|
||||
tmpl.set("exchanges", Symbol.getSymbols(db));
|
||||
|
||||
return tmpl;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
"interfaces": [
|
||||
{"se.koc.trader.api.TraderDaemon": "se.hal.page.SensorOverviewWebPage"},
|
||||
|
||||
{"se.koc.trader.api.TraderPage": "se.koc.trader.page.ExchangeConfigPage"},
|
||||
{"se.koc.trader.api.TraderPage": "se.koc.trader.page.SymbolConfigPage"},
|
||||
{"se.koc.trader.api.TraderPage": "se.koc.trader.page.SymbolOverviewPage"}
|
||||
]
|
||||
|
|
|
|||
3
src/main/resources/web/img/favicon.svg
Normal file
3
src/main/resources/web/img/favicon.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="robot" class="svg-inline--fa fa-robot fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512">
|
||||
<path style="color: white;" fill="currentColor" d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 754 B |
|
|
@ -3,12 +3,12 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
<link rel="icon" href="img/favicon.svg">
|
||||
<title>Trader</title>
|
||||
|
||||
<!-- CSS -->
|
||||
<!--<link href="css/adminkit-web-ui-kit.min.css" rel="stylesheet">-->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="css/adminkit-web-ui-kit.min.css" rel="stylesheet">
|
||||
<!--<link href="css/bootstrap.min.css" rel="stylesheet">-->
|
||||
<link href="css/bootstrap-icons.css" rel="stylesheet">
|
||||
<link href="css/bootstrap-switch.min.css" rel="stylesheet">
|
||||
<link href="css/fontawesome.min.css" rel="stylesheet">
|
||||
|
|
@ -24,26 +24,39 @@
|
|||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<nav class="navbar navbar-expand-md navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand px-3" href="#">
|
||||
<i class="fas fa-robot"></i> Trader
|
||||
</a>
|
||||
|
||||
{{navigation}}
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="wrapper">
|
||||
{{sub_navigation}}
|
||||
|
||||
<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
|
||||
<div class="main">
|
||||
{{navigation}}
|
||||
|
||||
<main class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2 mb-xl-3">
|
||||
<div class="col-auto d-none d-sm-block">
|
||||
<h3><strong>{{page.getName()}}</strong></h3>
|
||||
</div>
|
||||
|
||||
<div class="col-auto ms-auto text-end mt-n1">
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb bg-transparent p-0 mt-1 mb-0">
|
||||
{{#breadcrumb}}
|
||||
<li class="breadcrumb-item {{#.isActive()}}active{{/.isActive()}}">
|
||||
<a {{#.getURL()}}href="{{.getURL()}}"{{/.getURL()}}>
|
||||
{{#.getName()}}{{.getName()}}{{/.getName()}}
|
||||
</a>
|
||||
</li>
|
||||
{{/breadcrumb}}
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
{{content}}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,31 +1,29 @@
|
|||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample04">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-md-0">
|
||||
</ul>
|
||||
|
||||
<!-- User navigation -->
|
||||
<ul class="navbar-nav navbar-right">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-item dropdown-toggle" href="#" data-bs-toggle="dropdown">
|
||||
<i class="bi bi-person"></i>
|
||||
<strong>{{user}}</strong>
|
||||
<nav class="navbar navbar-expand navbar-light navbar-bg">
|
||||
<a class="sidebar-toggle d-flex">
|
||||
<i class="hamburger align-self-center"></i>
|
||||
</a>
|
||||
|
||||
<div class="navbar-collapse collapse">
|
||||
<ul class="navbar-nav navbar-align">
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-icon dropdown-toggle d-inline-block d-sm-none" href="#" data-bs-toggle="dropdown">
|
||||
<i class="align-middle" data-feather="settings"></i>
|
||||
</a>
|
||||
|
||||
<a class="nav-link dropdown-toggle d-none d-sm-inline-block" href="#" data-bs-toggle="dropdown">
|
||||
<i class="bi bi-person"></i>
|
||||
<span class="text-dark">{{user}}</span>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
<a class="dropdown-item" href="pages-profile.html">
|
||||
<i class="bi bi-sliders"></i> Profile
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="#">
|
||||
<i class="bi bi-question-circle"></i> About
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<div align="center">
|
||||
<img src="{{user.getAvatarUrl()}}" />
|
||||
</div>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
{{#userNav}}
|
||||
<li>
|
||||
<a class="dropdown-item" href="{{.getURL()}}">{{.getName()}}</a>
|
||||
</li>
|
||||
{{/userNav}}
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
|
@ -1,30 +1,55 @@
|
|||
<!-- Sub navigation -->
|
||||
<nav id="sub-navbar" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse">
|
||||
<ul class="list-unstyled ps-0">
|
||||
<nav id="sidebar" class="sidebar">
|
||||
<div class="sidebar-content js-simplebar">
|
||||
<a class="sidebar-brand" href="index.html">
|
||||
<span class="align-middle">
|
||||
<i class="fas fa-robot"></i> Trader
|
||||
</span>
|
||||
</a>
|
||||
|
||||
<ul class="sidebar-nav">
|
||||
{{#rootNav}}
|
||||
{{^.getSubNavs().length}}
|
||||
<li class="mb-1">
|
||||
<button class="btn btn-toggle align-items-center rounded {{#.isActive()}}active{{/.isActive()}}">
|
||||
<li class="sidebar-header">
|
||||
{{.getName()}}
|
||||
</button>
|
||||
</li>
|
||||
{{#.getSubNavs()}}
|
||||
<li class="sidebar-item {{#.isActive()}}active{{/.isActive()}}">
|
||||
{{^.getSubNavs().length}}
|
||||
<a class="sidebar-link {{#.isActive()}}active{{/.isActive()}}" href="{{.getURL()}}">
|
||||
<span class="align-middle">{{.getName()}}</span>
|
||||
</a>
|
||||
{{/.getSubNavs().length}}
|
||||
{{#.getSubNavs().length}}
|
||||
<li class="mb-1">
|
||||
<button class="btn btn-toggle align-items-center rounded {{#.isActive()}}active{{/.isActive()}}" data-bs-toggle="collapse" data-bs-target="#{{.getName()}}-collapse">
|
||||
{{.getName()}}
|
||||
</button>
|
||||
<div class="collapse show" id="{{.getName()}}-collapse" style="">
|
||||
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small">
|
||||
<a class="sidebar-link" data-bs-target="#dashboards" data-bs-toggle="collapse">
|
||||
<i class="align-middle"></i>
|
||||
<span class="align-middle">{{.getName()}}</span>
|
||||
</a>
|
||||
<ul class="sidebar-dropdown list-unstyled collapse show" data-bs-parent="#sidebar">
|
||||
{{#.getSubNavs()}}
|
||||
<li>
|
||||
<a class="link-dark rounded" href="{{.getURL()}}">{{.getName()}}</a>
|
||||
<li class="sidebar-item {{#.isActive()}}active{{/.isActive()}}">
|
||||
<a class="sidebar-link" href="{{.getURL()}}">{{.getName()}}</a>
|
||||
</li>
|
||||
{{/.getSubNavs()}}
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
{{/.getSubNavs().length}}
|
||||
</li>
|
||||
{{/.getSubNavs()}}
|
||||
{{/rootNav}}
|
||||
</ul>
|
||||
|
||||
<!--
|
||||
<div class="sidebar-cta">
|
||||
<div class="sidebar-cta-content">
|
||||
<strong class="d-inline-block mb-2">Weekly Sales Report</strong>
|
||||
<div class="mb-3 text-sm">
|
||||
Your weekly sales report is ready for download!
|
||||
</div>
|
||||
|
||||
<div class="d-grid">
|
||||
<a href="https://adminkit.io/" class="btn btn-outline-primary" target="_blank">Download</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
</div>
|
||||
</nav>
|
||||
|
|
@ -1,14 +1,26 @@
|
|||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
||||
<h1>Market Overview</h1>
|
||||
</div>
|
||||
<div class="col-md-12 d-flex">
|
||||
|
||||
<div class="card flex-fill">
|
||||
<div class="card flex-fill w-100">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title mb-0">Open Trades</h5>
|
||||
<div class="card-actions float-end">
|
||||
<div class="dropdown show">
|
||||
<a href="#" data-bs-toggle="dropdown" data-bs-display="static">
|
||||
<i class="align-middle" data-feather="more-horizontal"></i>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-end">
|
||||
<a class="dropdown-item" href="#">Action</a>
|
||||
<a class="dropdown-item" href="#">Another action</a>
|
||||
<a class="dropdown-item" href="#">Something else here</a>
|
||||
</div>
|
||||
<div class="card-body px-4">
|
||||
</div>
|
||||
</div>
|
||||
<h5 class="card-title mb-0">Recent Movement</h5>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-sm">
|
||||
<table class="table table-hover table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
|
|
@ -30,5 +42,5 @@
|
|||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue