Commit
·
63f8219
1
Parent(s):
3d45a11
Upload 2 files
Browse files- index.html +359 -18
- index.js +176 -0
index.html
CHANGED
|
@@ -1,19 +1,360 @@
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
+
<html lang="en" >
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<title>Bootstrap Dashboard</title>
|
| 6 |
+
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.holoviz.org/panel/1.3.6/dist/images/apple-touch-icon.png">
|
| 7 |
+
<link rel="icon" href="https://cdn.holoviz.org/panel/1.3.6/dist/images/favicon.ico" type=""><meta name="name" content="Bootstrap Dashboard"> <style>
|
| 8 |
+
html, body {
|
| 9 |
+
display: flow-root;
|
| 10 |
+
box-sizing: border-box;
|
| 11 |
+
height: 100%;
|
| 12 |
+
margin: 0;
|
| 13 |
+
padding: 0;
|
| 14 |
+
}
|
| 15 |
+
</style>
|
| 16 |
+
<link rel="stylesheet" href="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/datatabulator/tabulator-tables@5.5.0/dist/css/tabulator_fast.min.css" type="text/css" />
|
| 17 |
+
|
| 18 |
+
<style type="text/css">
|
| 19 |
+
:host(.pn-loading),
|
| 20 |
+
.pn-loading {
|
| 21 |
+
overflow: hidden;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
:host(.pn-loading):before,
|
| 25 |
+
.pn-loading:before {
|
| 26 |
+
position: absolute;
|
| 27 |
+
height: 100%;
|
| 28 |
+
width: 100%;
|
| 29 |
+
content: '';
|
| 30 |
+
z-index: 1000;
|
| 31 |
+
background-color: rgb(255, 255, 255, 0.5);
|
| 32 |
+
border-color: lightgray;
|
| 33 |
+
background-repeat: no-repeat;
|
| 34 |
+
background-position: center;
|
| 35 |
+
background-size: auto 50%;
|
| 36 |
+
border-width: 1px;
|
| 37 |
+
cursor: progress;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
:host(.pn-loading) .pn-loading-msg,
|
| 41 |
+
.pn-loading .pn-loading-msg {
|
| 42 |
+
position: absolute;
|
| 43 |
+
top: 72%;
|
| 44 |
+
font-size: 2em;
|
| 45 |
+
color: black;
|
| 46 |
+
width: 100%;
|
| 47 |
+
text-align: center;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {
|
| 52 |
+
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=");
|
| 53 |
+
background-size: auto calc(min(50%, 400px));
|
| 54 |
+
}
|
| 55 |
+
</style><script type="text/javascript" src="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/datatabulator/tabulator-tables@5.5.0/dist/js/tabulator.min.js"></script>
|
| 56 |
+
<script type="text/javascript" src="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/datatabulator/luxon/build/global/luxon.min.js"></script>
|
| 57 |
+
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-3.3.2.min.js"></script>
|
| 58 |
+
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.2.min.js"></script>
|
| 59 |
+
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.2.min.js"></script>
|
| 60 |
+
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.2.min.js"></script>
|
| 61 |
+
<script type="text/javascript" src="https://cdn.holoviz.org/panel/1.3.6/dist/panel.min.js"></script>
|
| 62 |
+
|
| 63 |
+
<script type="text/javascript">
|
| 64 |
+
Bokeh.set_log_level("info");
|
| 65 |
+
</script><!-- Template CSS -->
|
| 66 |
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans">
|
| 67 |
+
<link rel="stylesheet" href="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/theme/default.css">
|
| 68 |
+
<link rel="stylesheet" href="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/fastbasetemplate/fast.css">
|
| 69 |
+
<link rel="stylesheet" href="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/fastlisttemplate/fast_list_template.css">
|
| 70 |
+
<style type="text/css">
|
| 71 |
+
|
| 72 |
+
:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {
|
| 73 |
+
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=");
|
| 74 |
+
background-size: auto calc(min(50%, 400px));
|
| 75 |
+
}
|
| 76 |
+
</style>
|
| 77 |
+
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans" />
|
| 78 |
+
|
| 79 |
+
<style>
|
| 80 |
+
:root {
|
| 81 |
+
--background-color: #ffffff;
|
| 82 |
+
--body-font: Open Sans, sans-serif;
|
| 83 |
+
--corner-radius: 3;
|
| 84 |
+
--header-background: #0072B5;
|
| 85 |
+
--header-color: #ffffff;
|
| 86 |
+
--sidebar-width: 330px;
|
| 87 |
+
}
|
| 88 |
+
body {
|
| 89 |
+
color: #2B2B2B;
|
| 90 |
+
background-color: var(--background-color);
|
| 91 |
+
font-family: var(--body-font);
|
| 92 |
+
}
|
| 93 |
+
#header a {
|
| 94 |
+
color: currentColor;
|
| 95 |
+
}
|
| 96 |
+
#header-design-provider {
|
| 97 |
+
--neutral-fill-hover: var(--header-background);
|
| 98 |
+
--neutral-fill-rest: var(--header-background);
|
| 99 |
+
--neutral-foreground-rest: var(--header-color);
|
| 100 |
+
background: var(--header-background);
|
| 101 |
+
color: var(--header-color);
|
| 102 |
+
}
|
| 103 |
+
#sidebar {
|
| 104 |
+
min-width: var(--sidebar-width);
|
| 105 |
+
max-width: var(--sidebar-width);
|
| 106 |
+
background-color: var(--panel-surface-color);
|
| 107 |
+
}
|
| 108 |
+
</style>
|
| 109 |
+
|
| 110 |
+
<!-- Template JS -->
|
| 111 |
+
<script src="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/fastbasetemplate/fast_template.js"></script>
|
| 112 |
+
<script src="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/@microsoft/fast-components@2.30.6/dist/fast-components.js" type="module"></script>
|
| 113 |
+
<script src="https://cdn.holoviz.org/panel/1.3.6/dist/bundled/fast/js/fast_design.js" type="module"></script>
|
| 114 |
+
|
| 115 |
+
<!-- Fast Script -->
|
| 116 |
+
<script type="text/javascript">
|
| 117 |
+
document.addEventListener('DOMContentLoaded', (event) => {
|
| 118 |
+
const header_design = new window.fastDesignProvider("#header-design-provider");
|
| 119 |
+
const body_design = window.bodyDesign = new window.fastDesignProvider("#body-design-provider");
|
| 120 |
+
body_design.setLuminance(1.0);
|
| 121 |
+
body_design.setAccentColor("#0072B5")
|
| 122 |
+
body_design.setNeutralColor("#000000");
|
| 123 |
+
header_design.setLuminance(1.0);
|
| 124 |
+
header_design.setAccentColor("#ffffff");
|
| 125 |
+
header_design.setNeutralColor("#ffffff");
|
| 126 |
+
});
|
| 127 |
+
</script>
|
| 128 |
+
</head>
|
| 129 |
+
<body class="pn-loading pn-arc">
|
| 130 |
+
<fast-design-system-provider id="body-design-provider" use-defaults>
|
| 131 |
+
<div id="container">
|
| 132 |
+
<fast-design-system-provider id="header-design-provider">
|
| 133 |
+
<nav id="header" class="shadow" >
|
| 134 |
+
<div class="app-header">
|
| 135 |
+
<a class="title" href="https://awesome-panel.org" > Awesome Panel</a>
|
| 136 |
+
<span class="title">-</span>
|
| 137 |
+
<a class="title" href="" >Bootstrap Dashboard</a>
|
| 138 |
+
</div>
|
| 139 |
+
<div id="header-items">
|
| 140 |
+
</div>
|
| 141 |
+
<div class="pn-toggle-theme">
|
| 142 |
+
<fast-switch id="theme-switch" style="float: right;" onChange="toggleLightDarkTheme('default')" checked>
|
| 143 |
+
<span slot="checked-message">
|
| 144 |
+
<svg class="theme-toggle-icon" fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25"><path d="M0 0h24v24H0z" fill="none"/><path d="M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z"/></svg>
|
| 145 |
+
</span>
|
| 146 |
+
<span slot="unchecked-message">
|
| 147 |
+
<svg class="theme-toggle-icon" fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 2c-1.82 0-3.53.5-5 1.35C7.99 5.08 10 8.3 10 12s-2.01 6.92-5 8.65C6.47 21.5 8.18 22 10 22c5.52 0 10-4.48 10-10S15.52 2 10 2z"/></svg>
|
| 148 |
+
</span>
|
| 149 |
+
</fast-switch>
|
| 150 |
+
<fast-tooltip anchor="theme-switch" position="bottom">
|
| 151 |
+
Toggle the Theme
|
| 152 |
+
</fast-tooltip>
|
| 153 |
+
</div>
|
| 154 |
+
<div class="pn-busy-container" id="busy-container">
|
| 155 |
+
<div id="fcd5a91b-233b-4bc2-a546-c692edf0e0d6" data-root-id="p1016" style="display: contents;"></div>
|
| 156 |
+
</div>
|
| 157 |
+
<fast-tooltip anchor="busy-container" position="left">
|
| 158 |
+
Busy Indicator
|
| 159 |
+
</fast-tooltip>
|
| 160 |
+
</nav>
|
| 161 |
+
</fast-design-system-provider>
|
| 162 |
+
|
| 163 |
+
<div class="row" id="content">
|
| 164 |
+
|
| 165 |
+
<div class="main" id="main">
|
| 166 |
+
<div class="main-margin" style="max-width: 800px;">
|
| 167 |
+
<div class="card-margin stretch_width">
|
| 168 |
+
<div class="pn-wrapper">
|
| 169 |
+
<span class="fullscreen-button" onclick="toggleFullScreen(this)">
|
| 170 |
+
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 18 18">
|
| 171 |
+
<path d="M4.5 11H3v4h4v-1.5H4.5V11zM3 7h1.5V4.5H7V3H3v4zm10.5 6.5H11V15h4v-4h-1.5v2.5zM11 3v1.5h2.5V7H15V3h-4z"/>
|
| 172 |
+
</svg>
|
| 173 |
+
</span>
|
| 174 |
+
<div id="e156abca-04d1-404e-8382-9625f25f55b6" data-root-id="p1017" style="display: contents;"></div>
|
| 175 |
+
</div>
|
| 176 |
+
</div>
|
| 177 |
+
<div class="card-margin stretch_width">
|
| 178 |
+
<div class="pn-wrapper">
|
| 179 |
+
<span class="fullscreen-button" onclick="toggleFullScreen(this)">
|
| 180 |
+
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 18 18">
|
| 181 |
+
<path d="M4.5 11H3v4h4v-1.5H4.5V11zM3 7h1.5V4.5H7V3H3v4zm10.5 6.5H11V15h4v-4h-1.5v2.5zM11 3v1.5h2.5V7H15V3h-4z"/>
|
| 182 |
+
</svg>
|
| 183 |
+
</span>
|
| 184 |
+
<div id="c38a18a4-c4d7-4c76-a09c-cab4cd25d51b" data-root-id="p1091" style="display: contents;"></div>
|
| 185 |
+
</div>
|
| 186 |
+
</div>
|
| 187 |
+
</div>
|
| 188 |
+
</div>
|
| 189 |
+
<fast-dialog id="pn-Modal" hidden>
|
| 190 |
+
<fast-button class="pn-modal-close" id="pn-closeModal">×</fast-button>
|
| 191 |
+
<div>
|
| 192 |
+
</div>
|
| 193 |
+
</fast-dialog>
|
| 194 |
+
</div>
|
| 195 |
+
</div>
|
| 196 |
+
</fast-design-system-provider>
|
| 197 |
+
|
| 198 |
+
<script type="text/javascript">
|
| 199 |
+
|
| 200 |
+
</script>
|
| 201 |
+
|
| 202 |
+
<script type="text/javascript">
|
| 203 |
+
function openNav() {
|
| 204 |
+
document.getElementById("sidebar").classList.remove("hidden");
|
| 205 |
+
document.getElementById("sidebar-button").onclick = closeNav;
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
function closeNav() {
|
| 209 |
+
document.getElementById("sidebar").classList.add("hidden");
|
| 210 |
+
document.getElementById("sidebar-button").onclick = openNav;
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
+
var modal = document.getElementById("pn-Modal");
|
| 214 |
+
var span = document.getElementById("pn-closeModal");
|
| 215 |
+
|
| 216 |
+
span.onclick = function() {
|
| 217 |
+
modal.style.display = "none";
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
window.onclick = function(event) {
|
| 221 |
+
if (event.target == modal) {
|
| 222 |
+
modal.style.display = "none";
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
</script>
|
| 226 |
+
|
| 227 |
+
<div id="ffbbecec-c524-426b-92a9-a41a9c848b4b" data-root-id="p1009" style="display: contents;"></div>
|
| 228 |
+
<div id="aaeb1216-8532-41c1-83cb-0942f199daac" data-root-id="p1012" style="display: contents;"></div>
|
| 229 |
+
<div id="ecd46395-4582-4930-ba31-0dc0b10adb40" data-root-id="p1002" style="display: contents;"></div>
|
| 230 |
+
<div id="b964325d-ed82-411b-8756-473dceb6aabb" data-root-id="p1013" style="display: contents;"></div>
|
| 231 |
+
|
| 232 |
+
|
| 233 |
+
<script type="text/javascript">
|
| 234 |
+
const pyodideWorker = new Worker("./index.js");
|
| 235 |
+
pyodideWorker.busy = false
|
| 236 |
+
pyodideWorker.queue = []
|
| 237 |
+
|
| 238 |
+
function send_change(jsdoc, event) {
|
| 239 |
+
if (event.setter_id != null && event.setter_id == 'py') {
|
| 240 |
+
return
|
| 241 |
+
} else if (pyodideWorker.busy && event.model && event.attr) {
|
| 242 |
+
let events = []
|
| 243 |
+
for (const old_event of pyodideWorker.queue) {
|
| 244 |
+
if (!(old_event.model === event.model && old_event.attr === event.attr)) {
|
| 245 |
+
events.push(old_event)
|
| 246 |
+
}
|
| 247 |
+
}
|
| 248 |
+
events.push(event)
|
| 249 |
+
pyodideWorker.queue = events
|
| 250 |
+
return
|
| 251 |
+
}
|
| 252 |
+
const patch = jsdoc.create_json_patch([event])
|
| 253 |
+
pyodideWorker.busy = true
|
| 254 |
+
pyodideWorker.postMessage({type: 'patch', patch: patch})
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
pyodideWorker.onmessage = async (event) => {
|
| 258 |
+
const msg = event.data
|
| 259 |
+
|
| 260 |
+
const body = document.getElementsByTagName('body')[0]
|
| 261 |
+
const loading_msgs = document.getElementsByClassName('pn-loading-msg')
|
| 262 |
+
if (msg.type === 'idle') {
|
| 263 |
+
if (pyodideWorker.queue.length) {
|
| 264 |
+
const patch = pyodideWorker.jsdoc.create_json_patch(pyodideWorker.queue)
|
| 265 |
+
pyodideWorker.busy = true
|
| 266 |
+
pyodideWorker.queue = []
|
| 267 |
+
pyodideWorker.postMessage({type: 'patch', patch: patch})
|
| 268 |
+
} else {
|
| 269 |
+
pyodideWorker.busy = false
|
| 270 |
+
}
|
| 271 |
+
} else if (msg.type === 'status') {
|
| 272 |
+
let loading_msg
|
| 273 |
+
if (loading_msgs.length) {
|
| 274 |
+
loading_msg = loading_msgs[0]
|
| 275 |
+
} else if (body.classList.contains('pn-loading')) {
|
| 276 |
+
loading_msg = document.createElement('div')
|
| 277 |
+
loading_msg.classList.add('pn-loading-msg')
|
| 278 |
+
body.appendChild(loading_msg)
|
| 279 |
+
}
|
| 280 |
+
if (loading_msg != null) {
|
| 281 |
+
loading_msg.innerHTML = msg.msg
|
| 282 |
+
}
|
| 283 |
+
} else if (msg.type === 'render') {
|
| 284 |
+
const docs_json = JSON.parse(msg.docs_json)
|
| 285 |
+
const render_items = JSON.parse(msg.render_items)
|
| 286 |
+
const root_ids = JSON.parse(msg.root_ids)
|
| 287 |
+
|
| 288 |
+
// Remap roots in message to element IDs
|
| 289 |
+
const root_els = document.querySelectorAll('[data-root-id]')
|
| 290 |
+
const data_roots = []
|
| 291 |
+
for (const el of root_els) {
|
| 292 |
+
el.innerHTML = ''
|
| 293 |
+
data_roots.push([el.getAttribute('data-root-id'), el.id])
|
| 294 |
+
}
|
| 295 |
+
data_roots.sort((a, b) => a[0]<b[0] ? -1: 1)
|
| 296 |
+
const roots = {}
|
| 297 |
+
for (let i=0; i<data_roots.length; i++) {
|
| 298 |
+
roots[root_ids[i]] = data_roots[i][1]
|
| 299 |
+
}
|
| 300 |
+
render_items[0]['roots'] = roots
|
| 301 |
+
render_items[0]['root_ids'] = root_ids
|
| 302 |
+
|
| 303 |
+
// Embed content
|
| 304 |
+
const [views] = await Bokeh.embed.embed_items(docs_json, render_items)
|
| 305 |
+
|
| 306 |
+
// Remove loading spinner and message
|
| 307 |
+
body.classList.remove("pn-loading", "arc")
|
| 308 |
+
for (const loading_msg of loading_msgs) {
|
| 309 |
+
loading_msg.remove()
|
| 310 |
+
}
|
| 311 |
+
|
| 312 |
+
// Setup bi-directional syncing
|
| 313 |
+
pyodideWorker.jsdoc = jsdoc = [...views.roots.values()][0].model.document
|
| 314 |
+
jsdoc.on_change(send_change.bind(null, jsdoc), false)
|
| 315 |
+
pyodideWorker.postMessage({'type': 'rendered'})
|
| 316 |
+
pyodideWorker.postMessage({'type': 'location', location: JSON.stringify(window.location)})
|
| 317 |
+
} else if (msg.type === 'patch') {
|
| 318 |
+
pyodideWorker.jsdoc.apply_json_patch(msg.patch, msg.buffers, setter_id='py')
|
| 319 |
+
}
|
| 320 |
+
};
|
| 321 |
+
</script>
|
| 322 |
+
<script type="application/json" id="p1174">
|
| 323 |
+
{"226180fe-a52f-44c3-b35a-c5515dc94d77":{"version":"3.3.2","title":"Bootstrap Dashboard","roots":[{"type":"object","name":"panel.models.location.Location","id":"p1002","attributes":{"name":"location","reload":false}},{"type":"object","name":"panel.models.markup.HTML","id":"p1009","attributes":{"name":"js_area","stylesheets":["\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1140","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"type":"object","name":"ImportedStyleSheet","id":"p1137","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/bundled/theme/fast.css"}}],"width":0,"height":0,"margin":0,"sizing_mode":"fixed","align":"start","disable_math":true}},{"type":"object","name":"panel.models.reactive_html.ReactiveHTML","id":"p1012","attributes":{"name":"actions","subscribed_events":{"type":"set","entries":["dom_event"]},"stylesheets":["\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1141","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"id":"p1137"}],"margin":0,"align":"start","data":{"type":"object","name":"TemplateActions1","id":"p1010","attributes":{"name":"TemplateActions01100"}},"scripts":{"type":"map","entries":[["open_modal",["document.getElementById(&#x27;pn-Modal&#x27;).style.display = &#x27;block&#x27;"]],["close_modal",["document.getElementById(&#x27;pn-Modal&#x27;).style.display = &#x27;none&#x27;"]]]}}},{"type":"object","name":"panel.models.browser.BrowserInfo","id":"p1013","attributes":{"name":"browser_info"}},{"type":"object","name":"panel.models.markup.HTML","id":"p1016","attributes":{"name":"busy_indicator","css_classes":["loader","light"],"stylesheets":[":host { --loading-spinner-size: 20px; }","\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1142","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"type":"object","name":"ImportedStyleSheet","id":"p1143","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loadingspinner.css"}},{"id":"p1137"}],"min_width":20,"min_height":20,"margin":[5,10],"align":"start"}},{"type":"object","name":"panel.models.layout.Column","id":"p1017","attributes":{"name":"main-140462799328784","tags":["main"],"stylesheets":["\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1144","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"type":"object","name":"ImportedStyleSheet","id":"p1145","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/listpanel.css"}},{"id":"p1137"}],"min_width":700,"margin":0,"sizing_mode":"stretch_width","align":"start","children":[{"type":"object","name":"panel.models.markup.HTML","id":"p1020","attributes":{"css_classes":["markdown"],"stylesheets":["\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1146","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"type":"object","name":"ImportedStyleSheet","id":"p1147","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/markdown.css"}},{"id":"p1137"}],"margin":[5,10],"sizing_mode":"stretch_width","align":"start","text":"&lt;h2 id=&quot;dashboard&quot;&gt;Dashboard &lt;a class=&quot;header-anchor&quot; href=&quot;#dashboard&quot;&gt;\u00b6&lt;/a&gt;&lt;/h2&gt;\n"}},{"type":"object","name":"Figure","id":"p1031","attributes":{"stylesheets":["\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1148","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"id":"p1137"}],"width":700,"height":500,"margin":[5,10],"sizing_mode":"fixed","align":"start","x_range":{"type":"object","name":"FactorRange","id":"p1021","attributes":{"tags":[[["Day","Day",null]],[]],"factors":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]}},"y_range":{"type":"object","name":"Range1d","id":"p1022","attributes":{"tags":[[["Orders","Orders",null]],{"type":"map","entries":[["invert_yaxis",false],["autorange",false]]}],"start":12000,"end":26000,"reset_start":12000,"reset_end":26000}},"x_scale":{"type":"object","name":"CategoricalScale","id":"p1041"},"y_scale":{"type":"object","name":"LinearScale","id":"p1042"},"title":{"type":"object","name":"Title","id":"p1034","attributes":{"text_color":"#2B2B2B","text_font":"Open Sans, sans-serif","text_font_size":"1.15em"}},"outline_line_color":"#888888","outline_line_alpha":0.5,"outline_line_width":1,"renderers":[{"type":"object","name":"GlyphRenderer","id":"p1072","attributes":{"data_source":{"type":"object","name":"ColumnDataSource","id":"p1063","attributes":{"selected":{"type":"object","name":"Selection","id":"p1064","attributes":{"indices":[],"line_indices":[]}},"selection_policy":{"type":"object","name":"UnionRenderers","id":"p1065"},"data":{"type":"map","entries":[["Day",["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]],["Orders",{"type":"ndarray","array":{"type":"bytes","data":"szwAAGFTAAAzSAAAw10AAMFbAAAcXgAAAi8AAA=="},"shape":[7],"dtype":"int32","order":"little"}]]}}},"view":{"type":"object","name":"CDSView","id":"p1073","attributes":{"filter":{"type":"object","name":"AllIndices","id":"p1074"}}},"glyph":{"type":"object","name":"Line","id":"p1069","attributes":{"tags":["apply_ranges"],"x":{"type":"field","field":"Day"},"y":{"type":"field","field":"Orders"},"line_color":"#0072B5","line_width":6}},"selection_glyph":{"type":"object","name":"Line","id":"p1075","attributes":{"tags":["apply_ranges"],"x":{"type":"field","field":"Day"},"y":{"type":"field","field":"Orders"},"line_color":"#0072B5","line_width":6}},"nonselection_glyph":{"type":"object","name":"Line","id":"p1070","attributes":{"tags":["apply_ranges"],"x":{"type":"field","field":"Day"},"y":{"type":"field","field":"Orders"},"line_color":"#0072B5","line_alpha":0.1,"line_width":6}},"muted_glyph":{"type":"object","name":"Line","id":"p1071","attributes":{"tags":["apply_ranges"],"x":{"type":"field","field":"Day"},"y":{"type":"field","field":"Orders"},"line_color":"#0072B5","line_alpha":0.2,"line_width":6}}}},{"type":"object","name":"GlyphRenderer","id":"p1085","attributes":{"data_source":{"type":"object","name":"ColumnDataSource","id":"p1076","attributes":{"selected":{"type":"object","name":"Selection","id":"p1077","attributes":{"indices":[],"line_indices":[]}},"selection_policy":{"type":"object","name":"UnionRenderers","id":"p1078"},"data":{"type":"map","entries":[["Day",["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]],["Orders",{"type":"ndarray","array":{"type":"bytes","data":"szwAAGFTAAAzSAAAw10AAMFbAAAcXgAAAi8AAA=="},"shape":[7],"dtype":"int32","order":"little"}]]}}},"view":{"type":"object","name":"CDSView","id":"p1086","attributes":{"filter":{"type":"object","name":"AllIndices","id":"p1087"}}},"glyph":{"type":"object","name":"Scatter","id":"p1082","attributes":{"tags":["apply_ranges"],"x":{"type":"field","field":"Day"},"y":{"type":"field","field":"Orders"},"size":{"type":"value","value":10},"line_color":{"type":"value","value":"#0072B5"},"fill_color":{"type":"value","value":"#0072B5"},"hatch_color":{"type":"value","value":"#0072B5"}}},"selection_glyph":{"type":"object","name":"Scatter","id":"p1088","attributes":{"tags":["apply_ranges"],"x":{"type":"field","field":"Day"},"y":{"type":"field","field":"Orders"},"size":{"type":"value","value":10},"angle":{"type":"value","value":0.0},"line_color":{"type":"value","value":"#0072B5"},"line_alpha":{"type":"value","value":1.0},"line_width":{"type":"value","value":1},"line_join":{"type":"value","value":"bevel"},"line_cap":{"type":"value","value":"butt"},"line_dash":{"type":"value","value":[]},"line_dash_offset":{"type":"value","value":0},"fill_color":{"type":"value","value":"#0072B5"},"fill_alpha":{"type":"value","value":1.0},"hatch_color":{"type":"value","value":"#0072B5"},"hatch_alpha":{"type":"value","value":1.0},"hatch_scale":{"type":"value","value":12.0},"hatch_pattern":{"type":"value","value":null},"hatch_weight":{"type":"value","value":1.0},"marker":{"type":"value","value":"circle"}}},"nonselection_glyph":{"type":"object","name":"Scatter","id":"p1083","attributes":{"tags":["apply_ranges"],"x":{"type":"field","field":"Day"},"y":{"type":"field","field":"Orders"},"size":{"type":"value","value":10},"line_color":{"type":"value","value":"#0072B5"},"line_alpha":{"type":"value","value":0.1},"fill_color":{"type":"value","value":"#0072B5"},"fill_alpha":{"type":"value","value":0.1},"hatch_color":{"type":"value","value":"#0072B5"},"hatch_alpha":{"type":"value","value":0.1}}},"muted_glyph":{"type":"object","name":"Scatter","id":"p1084","attributes":{"tags":["apply_ranges"],"x":{"type":"field","field":"Day"},"y":{"type":"field","field":"Orders"},"size":{"type":"value","value":10},"line_color":{"type":"value","value":"#0072B5"},"line_alpha":{"type":"value","value":0.2},"fill_color":{"type":"value","value":"#0072B5"},"fill_alpha":{"type":"value","value":0.2},"hatch_color":{"type":"value","value":"#0072B5"},"hatch_alpha":{"type":"value","value":0.2}}}}}],"toolbar":{"type":"object","name":"Toolbar","id":"p1040","attributes":{"tools":[{"type":"object","name":"WheelZoomTool","id":"p1026","attributes":{"tags":["hv_created"],"renderers":"auto","zoom_together":"none"}},{"type":"object","name":"HoverTool","id":"p1027","attributes":{"tags":["hv_created"],"renderers":[{"id":"p1072"},{"id":"p1085"}],"tooltips":[["Day","@{Day}"],["Orders","@{Orders}"]]}},{"type":"object","name":"SaveTool","id":"p1053"},{"type":"object","name":"PanTool","id":"p1054"},{"type":"object","name":"BoxZoomTool","id":"p1055","attributes":{"overlay":{"type":"object","name":"BoxAnnotation","id":"p1056","attributes":{"syncable":false,"level":"overlay","visible":false,"left":{"type":"number","value":"nan"},"right":{"type":"number","value":"nan"},"top":{"type":"number","value":"nan"},"bottom":{"type":"number","value":"nan"},"left_units":"canvas","right_units":"canvas","top_units":"canvas","bottom_units":"canvas","line_color":"black","line_alpha":1.0,"line_width":2,"line_dash":[4,4],"fill_color":"lightgrey","fill_alpha":0.5}}}},{"type":"object","name":"ResetTool","id":"p1061"}],"active_drag":{"id":"p1054"},"active_scroll":{"id":"p1026"}}},"toolbar_location":null,"left":[{"type":"object","name":"LinearAxis","id":"p1048","attributes":{"ticker":{"type":"object","name":"FixedTicker","id":"p1062","attributes":{"ticks":[12000,14000,16000,18000,20000,22000,24000],"minor_ticks":[]}},"formatter":{"type":"object","name":"BasicTickFormatter","id":"p1050"},"axis_label":"Orders","axis_label_standoff":10,"axis_label_text_color":"#2B2B2B","axis_label_text_font":"Open Sans, sans-serif","axis_label_text_font_size":"1.25em","axis_label_text_font_style":"normal","major_label_policy":{"type":"object","name":"AllLabels","id":"p1051"},"major_label_text_color":"#2B2B2B","major_label_text_font":"Open Sans, sans-serif","major_label_text_font_size":"1.025em","axis_line_color":"#2B2B2B","axis_line_alpha":0.1,"major_tick_line_color":"#2B2B2B","major_tick_line_alpha":0.5,"minor_tick_line_color":"#2B2B2B","minor_tick_line_alpha":0.25}}],"below":[{"type":"object","name":"CategoricalAxis","id":"p1043","attributes":{"ticker":{"type":"object","name":"CategoricalTicker","id":"p1044"},"formatter":{"type":"object","name":"CategoricalTickFormatter","id":"p1045"},"axis_label":"Day","axis_label_standoff":10,"axis_label_text_color":"#2B2B2B","axis_label_text_font":"Open Sans, sans-serif","axis_label_text_font_size":"1.25em","axis_label_text_font_style":"normal","major_label_policy":{"type":"object","name":"AllLabels","id":"p1046"},"major_label_text_color":"#2B2B2B","major_label_text_font":"Open Sans, sans-serif","major_label_text_font_size":"1.025em","axis_line_color":"#2B2B2B","axis_line_alpha":0.1,"major_tick_line_color":"#2B2B2B","major_tick_line_alpha":0.5,"minor_tick_line_color":"#2B2B2B","minor_tick_line_alpha":0.25}}],"center":[{"type":"object","name":"Grid","id":"p1047","attributes":{"axis":{"id":"p1043"},"ticker":{"id":"p1044"},"grid_line_color":"black","grid_line_alpha":0.25,"grid_line_width":0.1}},{"type":"object","name":"Grid","id":"p1052","attributes":{"dimension":1,"axis":{"id":"p1048"},"ticker":{"id":"p1062"},"grid_line_color":"black","grid_line_alpha":0.25,"grid_line_width":0.1}}],"background_fill_color":"#ffffff","border_fill_color":"#F7F7F7","border_fill_alpha":0,"min_border_top":10,"min_border_bottom":10,"min_border_left":10,"min_border_right":10,"output_backend":"webgl"}}]}},{"type":"object","name":"panel.models.layout.Column","id":"p1091","attributes":{"name":"main-140462751290832","tags":["main"],"stylesheets":["\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1149","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"type":"object","name":"ImportedStyleSheet","id":"p1150","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/listpanel.css"}},{"id":"p1137"}],"margin":0,"sizing_mode":"stretch_width","align":"start","children":[{"type":"object","name":"panel.models.markup.HTML","id":"p1094","attributes":{"css_classes":["markdown"],"stylesheets":["\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1151","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"type":"object","name":"ImportedStyleSheet","id":"p1152","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/markdown.css"}},{"id":"p1137"}],"margin":[5,10],"sizing_mode":"stretch_width","align":"start","text":"&lt;h2 id=&quot;section-title&quot;&gt;Section Title &lt;a class=&quot;header-anchor&quot; href=&quot;#section-title&quot;&gt;\u00b6&lt;/a&gt;&lt;/h2&gt;\n"}},{"type":"object","name":"panel.models.tabulator.DataTabulator","id":"p1132","attributes":{"subscribed_events":{"type":"set","entries":["table-edit","selection-change","cell-click"]},"stylesheets":["\n:host(.pn-loading.pn-arc):before, .pn-loading.pn-arc:before {\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\");\n background-size: auto calc(min(50%, 400px));\n}",{"type":"object","name":"ImportedStyleSheet","id":"p1154","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/css/loading.css"}},{"type":"object","name":"ImportedStyleSheet","id":"p1155","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/bundled/font-awesome/css/all.min.css"}},{"id":"p1137"},{"type":"object","name":"ImportedStyleSheet","id":"p1153","attributes":{"url":"https://cdn.holoviz.org/panel/1.3.6/dist/bundled/datatabulator/tabulator-tables@5.5.0/dist/css/tabulator_fast.min.css"}}],"margin":[5,10],"sizing_mode":"stretch_width","align":"start","configuration":{"type":"map","entries":[["selectable",true],["columns",[{"type":"map","entries":[["field","index"],["sorter","number"]]},{"type":"map","entries":[["field","Header0"],["sorter","number"]]},{"type":"map","entries":[["field","Header1"]]},{"type":"map","entries":[["field","Header2"]]},{"type":"map","entries":[["field","Header3"]]},{"type":"map","entries":[["field","Header4"]]}]],["dataTree",false]]},"columns":[{"type":"object","name":"TableColumn","id":"p1101","attributes":{"field":"index","title":"index","width":0,"formatter":{"type":"object","name":"NumberFormatter","id":"p1100","attributes":{"text_align":"left"}},"editor":{"type":"object","name":"CellEditor","id":"p1099"}}},{"type":"object","name":"TableColumn","id":"p1106","attributes":{"field":"Header0","title":"Header0","width":0,"formatter":{"type":"object","name":"NumberFormatter","id":"p1105","attributes":{"text_align":"right"}},"editor":{"type":"object","name":"IntEditor","id":"p1104"}}},{"type":"object","name":"TableColumn","id":"p1111","attributes":{"field":"Header1","title":"Header1","width":0,"formatter":{"type":"object","name":"StringFormatter","id":"p1110"},"editor":{"type":"object","name":"StringEditor","id":"p1109"}}},{"type":"object","name":"TableColumn","id":"p1116","attributes":{"field":"Header2","title":"Header2","width":0,"formatter":{"type":"object","name":"StringFormatter","id":"p1115"},"editor":{"type":"object","name":"StringEditor","id":"p1114"}}},{"type":"object","name":"TableColumn","id":"p1121","attributes":{"field":"Header3","title":"Header3","width":0,"formatter":{"type":"object","name":"StringFormatter","id":"p1120"},"editor":{"type":"object","name":"StringEditor","id":"p1119"}}},{"type":"object","name":"TableColumn","id":"p1126","attributes":{"field":"Header4","title":"Header4","width":0,"formatter":{"type":"object","name":"StringFormatter","id":"p1125"},"editor":{"type":"object","name":"StringEditor","id":"p1124"}}}],"indexes":["index"],"layout":"fit_data_stretch","source":{"type":"object","name":"ColumnDataSource","id":"p1129","attributes":{"selected":{"type":"object","name":"Selection","id":"p1130","attributes":{"indices":[],"line_indices":[]}},"selection_policy":{"type":"object","name":"UnionRenderers","id":"p1131"},"data":{"type":"map","entries":[["index",{"type":"ndarray","array":{"type":"bytes","data":"AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAAA=="},"shape":[16],"dtype":"int32","order":"little"}],["Header0",{"type":"ndarray","array":{"type":"bytes","data":"6QMAAOoDAADrAwAA6wMAAOwDAADtAwAA7gMAAO8DAADwAwAA8QMAAPIDAADzAwAA9AMAAPUDAAD2AwAA9wMAAA=="},"shape":[16],"dtype":"int32","order":"little"}],["Header1",{"type":"ndarray","array":["Lorem","amet","Integer","libero","dapibus","Nulla","nibh","sagittis","Fusce","augue","massa","eget","taciti","torquent","per","sodales"],"shape":[16],"dtype":"object","order":"little"}],["Header2",{"type":"ndarray","array":["ipsum","consectetur","nec","Sed","diam","quis","elementum","ipsum","nec","semper","Vestibulum","nulla","sociosqu","per","inceptos","ligula"],"shape":[16],"dtype":"object","order":"little"}],["Header3",{"type":"ndarray","array":["dolor","adipiscing","odio","cursus","Sed","sem","imperdiet","Praesent","tellus","porta","lacinia","Class","ad","conubia","himenaeos","in"],"shape":[16],"dtype":"object","order":"little"}],["Header4",{"type":"ndarray","array":["sit","elit","Praesent","ante","nisi","at","Duis","mauris","sed","Mauris","arcu","aptent","litora","nostra","Curabitur","libero"],"shape":[16],"dtype":"object","order":"little"}]]}}},"cell_styles":{"type":"map","entries":[["id","4774172b4cad44ada3564f5ae163a55b"],["data",{"type":"map"}]]},"page":1,"page_size":20,"select_mode":true,"selectable_rows":null}}]}}],"defs":[{"type":"model","name":"ReactiveHTML1"},{"type":"model","name":"FlexBox1","properties":[{"name":"align_content","kind":"Any","default":"flex-start"},{"name":"align_items","kind":"Any","default":"flex-start"},{"name":"flex_direction","kind":"Any","default":"row"},{"name":"flex_wrap","kind":"Any","default":"wrap"},{"name":"justify_content","kind":"Any","default":"flex-start"}]},{"type":"model","name":"FloatPanel1","properties":[{"name":"config","kind":"Any","default":{"type":"map"}},{"name":"contained","kind":"Any","default":true},{"name":"position","kind":"Any","default":"right-top"},{"name":"offsetx","kind":"Any","default":null},{"name":"offsety","kind":"Any","default":null},{"name":"theme","kind":"Any","default":"primary"},{"name":"status","kind":"Any","default":"normalized"}]},{"type":"model","name":"GridStack1","properties":[{"name":"mode","kind":"Any","default":"warn"},{"name":"ncols","kind":"Any","default":null},{"name":"nrows","kind":"Any","default":null},{"name":"allow_resize","kind":"Any","default":true},{"name":"allow_drag","kind":"Any","default":true},{"name":"state","kind":"Any","default":[]}]},{"type":"model","name":"drag1","properties":[{"name":"slider_width","kind":"Any","default":5},{"name":"slider_color","kind":"Any","default":"black"},{"name":"value","kind":"Any","default":50}]},{"type":"model","name":"click1","properties":[{"name":"terminal_output","kind":"Any","default":""},{"name":"debug_name","kind":"Any","default":""},{"name":"clears","kind":"Any","default":0}]},{"type":"model","name":"copy_to_clipboard1","properties":[{"name":"fill","kind":"Any","default":"none"},{"name":"value","kind":"Any","default":null}]},{"type":"model","name":"FastWrapper1","properties":[{"name":"object","kind":"Any","default":null},{"name":"style","kind":"Any","default":null}]},{"type":"model","name":"NotificationAreaBase1","properties":[{"name":"js_events","kind":"Any","default":{"type":"map"}},{"name":"position","kind":"Any","default":"bottom-right"},{"name":"_clear","kind":"Any","default":0}]},{"type":"model","name":"NotificationArea1","properties":[{"name":"js_events","kind":"Any","default":{"type":"map"}},{"name":"notifications","kind":"Any","default":[]},{"name":"position","kind":"Any","default":"bottom-right"},{"name":"_clear","kind":"Any","default":0},{"name":"types","kind":"Any","default":[{"type":"map","entries":[["type","warning"],["background","#ffc107"],["icon",{"type":"map","entries":[["className","fas fa-exclamation-triangle"],["tagName","i"],["color","white"]]}]]},{"type":"map","entries":[["type","info"],["background","#007bff"],["icon",{"type":"map","entries":[["className","fas fa-info-circle"],["tagName","i"],["color","white"]]}]]}]}]},{"type":"model","name":"Notification","properties":[{"name":"background","kind":"Any","default":null},{"name":"duration","kind":"Any","default":3000},{"name":"icon","kind":"Any","default":null},{"name":"message","kind":"Any","default":""},{"name":"notification_type","kind":"Any","default":null},{"name":"_destroyed","kind":"Any","default":false}]},{"type":"model","name":"TemplateActions1","properties":[{"name":"open_modal","kind":"Any","default":0},{"name":"close_modal","kind":"Any","default":0}]},{"type":"model","name":"BootstrapTemplateActions1","properties":[{"name":"open_modal","kind":"Any","default":0},{"name":"close_modal","kind":"Any","default":0}]},{"type":"model","name":"MaterialTemplateActions1","properties":[{"name":"open_modal","kind":"Any","default":0},{"name":"close_modal","kind":"Any","default":0}]}]}}
|
| 324 |
+
</script>
|
| 325 |
+
<script type="text/javascript">
|
| 326 |
+
(function() {
|
| 327 |
+
const fn = function() {
|
| 328 |
+
Bokeh.safely(function() {
|
| 329 |
+
(function(root) {
|
| 330 |
+
function embed_document(root) {
|
| 331 |
+
const docs_json = document.getElementById('p1174').textContent;
|
| 332 |
+
const render_items = [{"docid":"226180fe-a52f-44c3-b35a-c5515dc94d77","roots":{"p1002":"ecd46395-4582-4930-ba31-0dc0b10adb40","p1009":"ffbbecec-c524-426b-92a9-a41a9c848b4b","p1012":"aaeb1216-8532-41c1-83cb-0942f199daac","p1013":"b964325d-ed82-411b-8756-473dceb6aabb","p1016":"fcd5a91b-233b-4bc2-a546-c692edf0e0d6","p1017":"e156abca-04d1-404e-8382-9625f25f55b6","p1091":"c38a18a4-c4d7-4c76-a09c-cab4cd25d51b"},"root_ids":["p1002","p1009","p1012","p1013","p1016","p1017","p1091"]}];
|
| 333 |
+
root.Bokeh.embed.embed_items(docs_json, render_items);
|
| 334 |
+
}
|
| 335 |
+
if (root.Bokeh !== undefined) {
|
| 336 |
+
embed_document(root);
|
| 337 |
+
} else {
|
| 338 |
+
let attempts = 0;
|
| 339 |
+
const timer = setInterval(function(root) {
|
| 340 |
+
if (root.Bokeh !== undefined) {
|
| 341 |
+
clearInterval(timer);
|
| 342 |
+
embed_document(root);
|
| 343 |
+
} else {
|
| 344 |
+
attempts++;
|
| 345 |
+
if (attempts > 100) {
|
| 346 |
+
clearInterval(timer);
|
| 347 |
+
console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
|
| 348 |
+
}
|
| 349 |
+
}
|
| 350 |
+
}, 10, root)
|
| 351 |
+
}
|
| 352 |
+
})(window);
|
| 353 |
+
});
|
| 354 |
+
};
|
| 355 |
+
if (document.readyState != "loading") fn();
|
| 356 |
+
else document.addEventListener("DOMContentLoaded", fn);
|
| 357 |
+
})();
|
| 358 |
+
</script>
|
| 359 |
+
</body>
|
| 360 |
+
</html>
|
index.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
importScripts("https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js");
|
| 2 |
+
|
| 3 |
+
function sendPatch(patch, buffers, msg_id) {
|
| 4 |
+
self.postMessage({
|
| 5 |
+
type: 'patch',
|
| 6 |
+
patch: patch,
|
| 7 |
+
buffers: buffers
|
| 8 |
+
})
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
async function startApplication() {
|
| 12 |
+
console.log("Loading pyodide!");
|
| 13 |
+
self.postMessage({type: 'status', msg: 'Loading pyodide'})
|
| 14 |
+
self.pyodide = await loadPyodide();
|
| 15 |
+
self.pyodide.globals.set("sendPatch", sendPatch);
|
| 16 |
+
console.log("Loaded!");
|
| 17 |
+
await self.pyodide.loadPackage("micropip");
|
| 18 |
+
const env_spec = ['https://cdn.holoviz.org/panel/wheels/bokeh-3.3.2-py3-none-any.whl', 'https://cdn.holoviz.org/panel/1.3.6/dist/wheels/panel-1.3.6-py3-none-any.whl', 'pyodide-http==0.2.1', 'hvplot', 'pandas']
|
| 19 |
+
for (const pkg of env_spec) {
|
| 20 |
+
let pkg_name;
|
| 21 |
+
if (pkg.endsWith('.whl')) {
|
| 22 |
+
pkg_name = pkg.split('/').slice(-1)[0].split('-')[0]
|
| 23 |
+
} else {
|
| 24 |
+
pkg_name = pkg
|
| 25 |
+
}
|
| 26 |
+
self.postMessage({type: 'status', msg: `Installing ${pkg_name}`})
|
| 27 |
+
try {
|
| 28 |
+
await self.pyodide.runPythonAsync(`
|
| 29 |
+
import micropip
|
| 30 |
+
await micropip.install('${pkg}');
|
| 31 |
+
`);
|
| 32 |
+
} catch(e) {
|
| 33 |
+
console.log(e)
|
| 34 |
+
self.postMessage({
|
| 35 |
+
type: 'status',
|
| 36 |
+
msg: `Error while installing ${pkg_name}`
|
| 37 |
+
});
|
| 38 |
+
}
|
| 39 |
+
}
|
| 40 |
+
console.log("Packages loaded!");
|
| 41 |
+
self.postMessage({type: 'status', msg: 'Executing code'})
|
| 42 |
+
const code = `
|
| 43 |
+
|
| 44 |
+
import asyncio
|
| 45 |
+
|
| 46 |
+
from panel.io.pyodide import init_doc, write_doc
|
| 47 |
+
|
| 48 |
+
init_doc()
|
| 49 |
+
|
| 50 |
+
"""The purpose of this app is to test that a **multi-page Dashboard Layout** similar to the
|
| 51 |
+
[bootstrap dashboard template](https://getbootstrap.com/docs/4.3/examples/dashboard/)
|
| 52 |
+
from [getboostrap.com](https://getbootstrap.com/) can be implemented in
|
| 53 |
+
[Panel](https://panel.pyviz.org/).
|
| 54 |
+
"""
|
| 55 |
+
import hvplot.pandas # pylint: disable=unused-import
|
| 56 |
+
import pandas as pd
|
| 57 |
+
import panel as pn
|
| 58 |
+
|
| 59 |
+
BOOTSTRAP_DASHBOARD_CHART_URL="https://awesomepanel.blob.core.windows.net/resources/bootstrap_dashboard/bootstrap_dashboard_chart.csv"
|
| 60 |
+
BOOTSTRAP_DASHBOARD_TABLE_URL="https://awesomepanel.blob.core.windows.net/resources/bootstrap_dashboard/bootstrap_dashboard_table.csv"
|
| 61 |
+
|
| 62 |
+
COLOR="#0072B5"
|
| 63 |
+
|
| 64 |
+
@pn.cache
|
| 65 |
+
def _get_chart_data():
|
| 66 |
+
return pd.read_csv(BOOTSTRAP_DASHBOARD_CHART_URL)
|
| 67 |
+
|
| 68 |
+
@pn.cache
|
| 69 |
+
def _get_table_data():
|
| 70 |
+
return pd.read_csv(BOOTSTRAP_DASHBOARD_TABLE_URL)
|
| 71 |
+
|
| 72 |
+
def _holoviews_chart():
|
| 73 |
+
"""## Dashboard Orders Chart generated by HoloViews"""
|
| 74 |
+
data = _get_chart_data()
|
| 75 |
+
line_plot = data.hvplot.line(
|
| 76 |
+
x="Day",
|
| 77 |
+
y="Orders",
|
| 78 |
+
height=500,
|
| 79 |
+
line_color=COLOR,
|
| 80 |
+
line_width=6,
|
| 81 |
+
)
|
| 82 |
+
scatter_plot = data.hvplot.scatter(x="Day", y="Orders", height=300,).opts(
|
| 83 |
+
marker="o",
|
| 84 |
+
size=10,
|
| 85 |
+
color=COLOR,
|
| 86 |
+
)
|
| 87 |
+
fig = line_plot * scatter_plot
|
| 88 |
+
gridstyle = {
|
| 89 |
+
"grid_line_color": "black",
|
| 90 |
+
"grid_line_width": 0.1,
|
| 91 |
+
}
|
| 92 |
+
fig = fig.opts(
|
| 93 |
+
responsive=True,
|
| 94 |
+
toolbar=None,
|
| 95 |
+
yticks=list(
|
| 96 |
+
range(
|
| 97 |
+
12000,
|
| 98 |
+
26000,
|
| 99 |
+
2000,
|
| 100 |
+
)
|
| 101 |
+
),
|
| 102 |
+
ylim=(
|
| 103 |
+
12000,
|
| 104 |
+
26000,
|
| 105 |
+
),
|
| 106 |
+
gridstyle=gridstyle,
|
| 107 |
+
show_grid=True,
|
| 108 |
+
)
|
| 109 |
+
return fig
|
| 110 |
+
|
| 111 |
+
app = pn.extension("tabulator", sizing_mode="stretch_width")
|
| 112 |
+
|
| 113 |
+
pn.template.FastListTemplate(
|
| 114 |
+
site="Awesome Panel", site_url="https://awesome-panel.org", title="Bootstrap Dashboard",
|
| 115 |
+
main=[
|
| 116 |
+
pn.Column(pn.pane.Markdown("## Dashboard"), _holoviews_chart()),
|
| 117 |
+
pn.Column(pn.pane.Markdown("## Section Title"), pn.widgets.Tabulator(_get_table_data(), layout='fit_data_stretch')),
|
| 118 |
+
], main_max_width="800px", main_layout=None,
|
| 119 |
+
).servable("bootstrap_dashboard.html")
|
| 120 |
+
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
await write_doc()
|
| 124 |
+
`
|
| 125 |
+
|
| 126 |
+
try {
|
| 127 |
+
const [docs_json, render_items, root_ids] = await self.pyodide.runPythonAsync(code)
|
| 128 |
+
self.postMessage({
|
| 129 |
+
type: 'render',
|
| 130 |
+
docs_json: docs_json,
|
| 131 |
+
render_items: render_items,
|
| 132 |
+
root_ids: root_ids
|
| 133 |
+
})
|
| 134 |
+
} catch(e) {
|
| 135 |
+
const traceback = `${e}`
|
| 136 |
+
const tblines = traceback.split('\n')
|
| 137 |
+
self.postMessage({
|
| 138 |
+
type: 'status',
|
| 139 |
+
msg: tblines[tblines.length-2]
|
| 140 |
+
});
|
| 141 |
+
throw e
|
| 142 |
+
}
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
self.onmessage = async (event) => {
|
| 146 |
+
const msg = event.data
|
| 147 |
+
if (msg.type === 'rendered') {
|
| 148 |
+
self.pyodide.runPythonAsync(`
|
| 149 |
+
from panel.io.state import state
|
| 150 |
+
from panel.io.pyodide import _link_docs_worker
|
| 151 |
+
|
| 152 |
+
_link_docs_worker(state.curdoc, sendPatch, setter='js')
|
| 153 |
+
`)
|
| 154 |
+
} else if (msg.type === 'patch') {
|
| 155 |
+
self.pyodide.globals.set('patch', msg.patch)
|
| 156 |
+
self.pyodide.runPythonAsync(`
|
| 157 |
+
state.curdoc.apply_json_patch(patch.to_py(), setter='js')
|
| 158 |
+
`)
|
| 159 |
+
self.postMessage({type: 'idle'})
|
| 160 |
+
} else if (msg.type === 'location') {
|
| 161 |
+
self.pyodide.globals.set('location', msg.location)
|
| 162 |
+
self.pyodide.runPythonAsync(`
|
| 163 |
+
import json
|
| 164 |
+
from panel.io.state import state
|
| 165 |
+
from panel.util import edit_readonly
|
| 166 |
+
if state.location:
|
| 167 |
+
loc_data = json.loads(location)
|
| 168 |
+
with edit_readonly(state.location):
|
| 169 |
+
state.location.param.update({
|
| 170 |
+
k: v for k, v in loc_data.items() if k in state.location.param
|
| 171 |
+
})
|
| 172 |
+
`)
|
| 173 |
+
}
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
startApplication()
|