-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.py
128 lines (115 loc) · 4.27 KB
/
index.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
from app_main import app, server, URL_BASEPATH, LOGOS, HDR_LOGO
from app_layouts import intro_layout, static_layout, flex_layout
server = server
# the app and its options are defined in the main_app module
app.layout = html.Div(
className='grid-x app_style',
children=[
dcc.Location(id='url', refresh=False),
html.Div(
id='header-div',
className='cell header header_style',
children=[
dcc.Link(
id='back-intro-link',
className='btn btn--hollow',
style={'display': 'none'},
children='back to intro',
href='/{}/'.format(URL_BASEPATH)
),
html.Div(
id='header-content',
className='grid-x',
children=[
html.Div(
className='cell large-10 small-offset-1 hdr__h2',
children='NDC Off-Grid Alternatives'
),
html.H1(
className='cell large-10 small-offset-1',
children='Renewable Energy Off-Grid Explorer',
),
html.Div(
className='cell large-10 small-offset-1 hdr__h2',
children='Visualization of Electrification Scenarios until 2030',
),
]
),
html.Div(
className='show-for-large',
children=html.Img(
className='hdr__logo',
src='data:image/png;base64,{}'.format(HDR_LOGO.decode())
)
),
html.Div(
className='hide-for-large',
children=html.Img(
className='hdr__logo__small',
src='data:image/png;base64,{}'.format(HDR_LOGO.decode())
)
)
]
),
html.Div(
id='page-div',
className='cell',
children=[
html.Div(id='page-content'),
]
),
html.Div(
id='footer-div',
className='cell footer',
children=[
html.Div(
className='footer-logo',
children=html.Img(
src='data:image/png;base64,{}'.format(logo.decode()),
)
)
for logo in LOGOS
]
),
]
)
# define the callbacks
static_layout.callbacks(app)
flex_layout.callbacks(app)
@app.callback(
Output('page-content', 'children'),
[Input('url', 'pathname')]
)
def display_page(pathname):
"""Manage the url path between the different layouts"""
if pathname == '/{}'.format(URL_BASEPATH) \
or pathname == '/{}/'.format(URL_BASEPATH) \
or pathname == '/' or pathname is None:
return intro_layout.layout
elif pathname == '/{}/{}'.format(URL_BASEPATH, static_layout.URL_PATHNAME):
return static_layout.layout
elif pathname == '/{}/{}'.format(URL_BASEPATH, flex_layout.URL_PATHNAME):
return flex_layout.layout
@app.callback(
Output('back-intro-link', 'style'),
[Input('url', 'pathname')],
[State('back-intro-link', 'style')]
)
def display_page(pathname, cur_style):
"""Manage display of the return to index button between the different layouts"""
if cur_style is None:
cur_style = {'display': 'none'}
if pathname == '/{}'.format(URL_BASEPATH) \
or pathname == '/{}/'.format(URL_BASEPATH) \
or pathname == '/' or pathname is None:
cur_style.update({'display': 'none'})
elif pathname == '/{}/{}'.format(URL_BASEPATH, static_layout.URL_PATHNAME):
cur_style.update({'display': 'block'})
elif pathname == '/{}/{}'.format(URL_BASEPATH, flex_layout.URL_PATHNAME):
cur_style.update({'display': 'block'})
return cur_style
if __name__ == '__main__':
app.run_server(debug=True)